1. 문제 상황

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted 가 뜨는 경우가 있다.

 

2. 원인

메모리 부족으로 추정된다.

* PHP의 메모리 제한 기본값은 128MB

 

3. 해결

PHP 설정파일에서 메모리 제한을 수정 후(더 큰 값으로 늘림), 웹서버를 재시작 해주면 모든 PHP 파일에 적용된다.

아래는 CentOS, Apache를 사용하는 경우의 예이다.

Bash

vi /etc/php.ini

php.ini

memory_limit = 256M

Bash

systemctl restart httpd

 

참고

https://zetawiki.com/wiki/PHP_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%B6%80%EC%A1%B1

1. 문제 상황

mysql 이 자꾸 죽는다거나, 시작이 안되는 경우가 있다.

 

2. 원인 파악

로그파일을 분석했을 때, 아래와 같은 메시지가 있다면 메모리가 부족해서 실행을 못하는 것이다.

InnoDB 버퍼 풀 사이즈가 128M (디폴트 값)로 설정되어 있는데, 이를 수용할 만한 메모리가 부족해서 할당 못하고 fail된 것.

(물리적인 메모리 사이즈 자체가 작거나, 다른 프로그램들이 많이 돌아가고 있어 여유 메모리가 부족하거나, 이유는 다양할 수 있다.)

InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
InnoDB: Completed initialization of buffer pool
InnoDB: Fatal error: cannot allocate memory for the buffer pool
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[Note] Plugin 'FEEDBACK' is disabled.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

3. 해결책

my.cnf 파일에 innodb_buffer_pool_size 를 낮춘 설정을 추가해 주면 된다. (아래 설정 추가)

64M도 메모리 부족으로 실행 안된다면, 32M, 16M.. 사이즈를 더 낮춰서 저장 후 mysql을 실행해보면 된다.

(메모리가 작아지면 DB 성능이 낮아질 우려는 있다.)

innodb_buffer_pool_size=64M

또는, 사용되지 않는 다른 프로그램이나 데몬들을 종료하거나, 물리적 메모리를 추가해주는 등 전체 메모리를 늘려주는 것도 방법이다.

'DB' 카테고리의 다른 글

[DB] MariaDB 보안 설정  (0) 2024.09.27
[MariaDB] root 패스워드 리셋 방법  (0) 2023.07.19
[DB] MariaDB 인코딩  (0) 2023.02.10
[SQLite] SQLite DB 한계  (0) 2022.04.03
데이터베이스(DB) vs. 데이터베이스 관리 시스템(DBMS)  (0) 2021.12.20

1. clone

원격 저장소를 내 컴퓨터에 복제한다. (폴더명을 입력해주면, 폴더가 생성되며 그 안으로 원격 저장소가 복제된다.)

git clone [클론할 git repository 주소] [폴더명]

 

2. checkout

특정 브랜치를 가져온다.

git checkout [브랜치명]

 

3. username과 email 설정

커밋을 하려면 내가 누구인지를 설정해 주어야 한다. (그래야 누가 커밋했는지 알 수 있음)

--global : 모든 프로젝트에 이 계정을 적용

git config --global user.name "Your Name"
git config --global user.email you@example.com

 

4. add

생성한 파일을 git 인덱스에 추가한다. (커밋을 위한 준비)

git add "생성한 파일명"

 

5. commit

인덱스에 추가된 파일을 로컬 저장소에 커밋한다.

git commit -m "커밋 메시지"

 

6. push.default 설정

push의 기본동작을 matching과 simple 중에 선택할 수 있다.

1) matching : 전체 브랜치 push

git config --global push.default matching

 

2) simple : 현재 브랜치만 push

git config --global push.default simple

 

7. push

로컬 커밋 내용을 원격 저장소에 반영한다.

1) master 브랜치에 push하는 경우

git push origin master

2) 이미 브랜치가 설정되어 있다면, git push만 해도 된다.

git push

 

1. 터미널에 git 설치 명령어 입력

# yum install git

 

2. 중간에, disk size 보여주고, 계속 할지 물어보면 y 입력

=============================================================================================================================================================================================
 Package                                            Arch                                     Version                                            Repository                              Size
=============================================================================================================================================================================================
Installing:
 git                                                x86_64                                   1.8.3.1-23.el7_8                                   base                                   4.4 M
Installing for dependencies:
 perl-Error                                         noarch                                   1:0.17020-2.el7                                    base                                    32 k
 perl-Git                                           noarch                                   1.8.3.1-23.el7_8                                   base                                    56 k
 perl-TermReadKey                                   x86_64                                   2.30-20.el7                                        base                                    31 k
 rsync                                              x86_64                                   3.1.2-10.el7                                       base                                   404 k

Transaction Summary
=============================================================================================================================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 4.9 M
Installed size: 23 M
Is this ok [y/d/N]: y

3. 완료됨. 간단하다. (아래는 완료 화면)

Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:perl-Error-0.17020-2.el7.noarch                                                                                                                                         1/5
  Installing : rsync-3.1.2-10.el7.x86_64                                                                                                                                                 2/5
  Installing : perl-TermReadKey-2.30-20.el7.x86_64                                                                                                                                       3/5
  Installing : perl-Git-1.8.3.1-23.el7_8.noarch                                                                                                                                          4/5
  Installing : git-1.8.3.1-23.el7_8.x86_64                                                                                                                                               5/5
  Verifying  : git-1.8.3.1-23.el7_8.x86_64                                                                                                                                               1/5
  Verifying  : 1:perl-Error-0.17020-2.el7.noarch                                                                                                                                         2/5
  Verifying  : perl-TermReadKey-2.30-20.el7.x86_64                                                                                                                                       3/5
  Verifying  : perl-Git-1.8.3.1-23.el7_8.noarch                                                                                                                                          4/5
  Verifying  : rsync-3.1.2-10.el7.x86_64                                                                                                                                                 5/5

Installed:
  git.x86_64 0:1.8.3.1-23.el7_8

Dependency Installed:
  perl-Error.noarch 1:0.17020-2.el7              perl-Git.noarch 0:1.8.3.1-23.el7_8              perl-TermReadKey.x86_64 0:2.30-20.el7              rsync.x86_64 0:3.1.2-10.el7

Complete!

읽기 전용 파일은 덮어쓰거나, 삭제가 안된다. 

 

이 때, 파일 퍼미션을 설정해서 읽기 전용 속성을 제거할 수 있다.

(파일에 쓰기 권한을 주면, 덮어쓰기나 삭제가 가능해진다.)

 

읽기 전용(Read Only) 파일에 쓰기 권한 주기

// C++ code
#include <QFile>

void removeReadOnly(QString filepath)
{
    QFile file(filepath);
    file.setPermissions(file.permissions() |
                        QFileDevice::WriteOwner |
                        QFileDevice::WriteUser |
                        QFileDevice::WriteGroup |
                        QFileDevice::WriteOther);
}

 

1. 복사

copy [src 파일 경로] [dst 파일 경로]

참고 : %cd% 는 현재 배치파일이 실행되는 경로를 가리키는 변수

@echo off
:: C 드라이브의 text.txt 파일을 D 드라이브로 복사하는 경우
copy C:\text.txt D:\text.txt

:: C 드라이브의 text.txt 파일을, 현재 bat 파일이 실행되는 경로로 복사하는 경우
copy C:\text.txt %cd%\text.txt

 

2. 디렉토리 생성

md [생성할 디렉토리 경로]

- md 대신 mkdir을 써도 된다. (make directory의 약자)

@echo off
:: C 드라이브 안에 test라는 폴더를 생성한다
md C:\test
 
:: 현재 배치파일이 실행되는 경로 안에, test라는 폴더를 생성한다.
md %cd%\test
 
:: 디렉토리가 없는 경우 생성한다.
if not exist "%cd%\test" (
 md %cd%\test
)

 

3. 디렉토리 삭제

rd [삭제할 디렉토리 경로]

- rd 대신 rmdir을 써도 된다. (remove directory의 약자)

- rd는 디렉토리가 비어 있는 경우만 삭제된다.

- /s 옵션 : 디렉토리가 비어 있지 않은 경우에도 삭제한다. (삭제 여부 물음)

- /q 옵션 : 삭제 여부를 묻지 않고 삭제한다.

@echo off
:: C 드라이브의 test라는 폴더 삭제 (디렉토리가 비어있는 경우만 삭제됨)
rd C:\test

:: C 드라이브의 test라는 폴더와, 그 안의 내용까지 모두 삭제 (삭제 여부 물음, y 입력 시 삭제됨)
rd /s C:\test

:: C 드라이브의 test라는 폴더와, 그 안의 내용까지 모두 삭제 (삭제 여부 묻지 않고 삭제함)
rd /s /q C:\test

 

4. 파일 삭제

개별 파일을 삭제하는 방법이다. (디렉토리 삭제를 원하는 경우, 위의 rd 명령어 사용)

del [삭제할 파일 경로]

- 삭제할 파일 경로에 와일드 카드를 사용하면, 여러 개의 파일 삭제 가능 (예: *.exe 는 확장자가 exe인 모든 파일 삭제)

- 삭제할 파일 경로에 디렉토리명을 지정하면, 해당 디렉토리 내의 모든 파일 삭제(디렉토리는 남아있음)

- /P 옵션 : 각 파일 삭제 전에 삭제여부를 묻게 함 (y 입력 시 삭제됨)

- /F 옵션 : 읽기전용 파일 삭제함

@echo off
:: C 드라이브 안의 test.txt라는 파일 삭제
del C:\test.txt

:: 현재 디렉토리 안의 모든 exe 파일 삭제
del %cd%\*.exe

:: C:\BAT 라는 폴더 안의 모든 파일 삭제 (BAT이라는 폴더 자체는 삭제되지 않고 남아있음)
del C:\BAT

:: C 드라이브 안의 test.txt라는 파일 삭제시, 삭제 여부 물음 (y 입력 시 삭제됨)
del /P C:\test.txt

:: C 드라이브 안의 test.txt라는 읽기 전용 파일 삭제 (그냥 del 명령만으로는 읽기전용 파일은 삭제 안됨)
del /F C:\test.txt

 

5. 배치파일 실행 인자 받기

배치파일 실행 시 인자를 넘겨 받으려면, %1 ~ %9의 특수한 환경변수를 사용하면 된다.

(첫 번째 인자는 %1에, 두번째는 %2에, ... 9번째는 %9에 들어간다.)

@echo off
echo first : %1
echo second : %2

 

'개발' 카테고리의 다른 글

인코딩과 디코딩  (0) 2023.02.10
GUI 라이브러리/프레임워크  (0) 2022.02.02

QPushButton의 background color를 설정하고/가져오는 방법입니다.

 

1. QPushButton의 background color 설정하기

QColor color(Qt::red);
ui->pushButton->setStyleSheet(QString("background-color: %1;").arg(color.name()));

 

2. QPushButton의 background color 가져오기

// C++ code
QColor Panel::buttonColor() const
{
    return ui->pushButton->palette().background().color();
}

QMessageBox 안에 html 태그를 포함한 텍스트를 쓰고 싶은 경우가 있다.

예) <strong> 태그를 써서 특정 글자를 진하게 표현하고 싶다던가, <h4> 등의 제목 태그를 쓰고 싶다던가, <br/> 태그를 써서 줄바꿈을 하고 싶다던가..

 

이럴 때에는 setTextFormat(Qt::RichText); 함수로, 텍스트 포맷을 RichText로 설정해 주면 된다.

QMessageBox msg(this);
msg.setIcon(QMessageBox::Information);
msg.setTextFormat(Qt::RichText);
msg.setWindowTitle(tr("Title"));
msg.setText(tr("<strong>Hello!</strong><br/>World!");
msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
if (msg.exec() == QMessageBox::Yes) {
	// do something on Yes
}
else {
	// do something on No
}

 

+ Recent posts