이 문서는 지원되지 않는 버전의 토토 캔을위한 것입니다.
​​당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 18.4. 토토 베이 리토토 베이 관리버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

18.4. 커널 리소스 관리

토토 캔특히 서버의 여러 사본이 동일한 시스템에서 또는 매우 큰 설치에서 실행중인 경우 때때로 다양한 운영 체제 자원 제한을 소진 할 수 있습니다. 이 섹션은에 사용 된 토토 캔 리소스를 설명합니다.토토 캔및 토토 캔 자원 소비와 관련된 문제를 해결하기 위해 취할 수있는 단계

18.4.1. 공유 메모리 및 세마포어

토토 캔운영 체제에 프로세스 간 통신을 제공하도록 요구합니다 (IPC) 기능, 특히 공유 메모리 및 세마포어. 유닉스 유래 시스템은 일반적으로 제공System V IPC, posix IPC또는 둘 다.Windows이러한 기능을 자체적으로 구현하고 여기에서 논의되지 않습니다.

이러한 시설의 완전한 부족은 일반적으로에 의해 나타납니다.불법 시스템 호출서버 시작시 오류. 이 경우 토토 캔을 재구성하는 것 외에는 대안이 없습니다.토토 캔그들 없이는 작동하지 않습니다. 그러나이 상황은 현대 운영 체제들 사이에서 드물다.

서버를 시작하면토토 캔일반적으로 매우 적은 양의 시스템 v 공유 메모리와 훨씬 더 많은 양의 posix (를 할당합니다.mmap) 공유 메모리. 또한 System V 또는 Posix 스타일 일 수있는 상당수의 세마포어가 서버 시작시 생성됩니다.

note

이전토토 캔9.3, 시스템 v 공유 메모리 만 사용되었으므로 서버를 시작하는 데 필요한 시스템 v 공유 메모리의 양이 훨씬 컸습니다. 이전 버전의 서버를 실행중인 경우 서버 버전의 문서를 참조하십시오.

System VIPC기능은 일반적으로 시스템 전체의 할당 한계에 의해 제한됩니다. 언제토토 캔이러한 한도 중 하나를 초과하면 서버는 시작을 거부하고 문제와 그에 대한 수행에 대해 설명하는 유익한 오류 메시지를 남겨 두어야합니다. (참조섹션 18.3.1.) 관련 토토 캔 매개 변수는 다른 시스템에서 일관되게 이름을 지정합니다.표 18.1개요를 제공합니다. 그러나 설정하는 방법은 다양합니다.

표 18.1. System V IPC매개 변수

이름 설명 하나를 실행하는 데 필요한 값토토 캔인스턴스
Shmmax 공유 메모리 세그먼트의 최대 크기 (바이트) 적어도 1KB이지만 기본값은 일반적으로 훨씬 높습니다
Shmmin 공유 메모리 세그먼트의 최소 크기 (바이트) 1
Shmall 사용 가능한 공유 메모리의 총 금액 (바이트 또는 페이지) 동일Shmmax바이트 인 경우CEIL (shmmax/page_size)페이지 인 경우 다른 응용 프로그램의 공간
SHMSEG 프로세스 당 공유 메모리 세그먼트의 최대 수 1 세그먼트 만 필요하지만 기본값은 훨씬 높습니다
shmmni 공유 메모리 세그먼트의 최대 수 시스템 전체 좋아요SHMSEG다른 응용 프로그램을위한 공간
SEMMNI 최대 세마포어 식별자 수 (즉, 세트) 적어도CEIL ((Max_Connections + AutoVacuum_Max_Workers + Max_Worker_Processes + 5) / 16)다른 응용 프로그램을위한 공간
SEMMNS 시스템 전체의 최대 세마포어 수 CEIL ((Max_Connections + AutoVacuum_Max_Workers + Max_Worker_Processes + 5) / 16) * 17다른 응용 프로그램을위한 공간
SEMMSL 세트 당 최대 세부 수 최소 17
SEMMAP 세마포어 맵의 항목 수 텍스트 참조
SEMVMX 세마포어의 최대 값 최소 1000 (기본값은 종종 32767입니다. 필요하지 않으면 변경하지 않음)

토토 캔서버의 각 사본에 대해 시스템 v 공유 메모리 (일반적으로 48 바이트, 64 비트 플랫폼에서 48 바이트)가 필요합니다. 대부분의 최신 운영 체제 에서이 금액을 쉽게 할당 할 수 있습니다.Shmall, 이는 시스템 v 공유 메모리 시스템 전체의 총량입니다. 참고Shmall많은 시스템에서 바이트가 아닌 페이지에서 측정됩니다.

문제를 일으킬 가능성이 적은 공유 메모리 세그먼트의 최소 크기 (Shmmin).토토 캔(보통 1). 시스템 전체의 세그먼트 최대 수 (shmmni) 또는 프로세스 당 (SHMSEG) 시스템이 0으로 설정되지 않으면 문제를 일으키지 않을 것입니다.

System v Semaphores를 사용할 때토토 캔허용 된 연결 당 하나의 세마포어를 사용합니다 (max_connections), 허용 Autovacuum 작업자 프로세스 (autovacuum_max_workers) 허용 배경 프로세스 (max_worker_processes), 16 세트.매직 번호, 다른 응용 프로그램에서 사용하는 세마포어 세트와의 충돌을 감지합니다. 시스템의 최대 세마포어 수는에 의해 설정됩니다.SEMMNS, 결과적으로 적어도만큼 높아야합니다.max_connectionsplusautovacuum_max_workersplusmax_worker_processes, 16 개의 허용 연결과 작업자마다 추가로 1 개의 추가 정보를 제공합니다 (공식 참조표 18.1). 매개 변수SEMMNI한 번에 시스템에 존재할 수있는 세마포어 세트 수에 대한 제한을 결정합니다. 따라서이 매개 변수는 적어도CEIL ((Max_Connections + AutoVacuum_Max_Workers + Max_Worker_Processes + 5) / 16). 허용 연결 수를 낮추는 것은 실패에 대한 임시 해결 방법이며, 일반적으로 혼란스럽게 말합니다장치에 남은 공간 없음, 함수에서Semget.

경우에 따라 증가해야 할 수도 있습니다SEMMAP최소한 순서에 있어야SEMMNS. 시스템 에이 매개 변수가있는 경우 (많은 사람들은 그렇지 않음), 이용 가능한 세마포어의 각각의 연속 블록에 항목이 필요한 세마포어 리소스 맵의 크기를 정의합니다.

관련된 다양한 기타 설정세마포어 undo:SEMMNUandSemume, 영향을 미치지 마십시오토토 캔.

posix semaphores를 사용할 때 필요한 세마포어의 수는 시스템 V와 동일합니다.max_connections), 허용 Autovacuum 작업자 프로세스 (autovacuum_max_workers) 허용 배경 프로세스 (max_worker_processes). 이 옵션이 선호되는 플랫폼에서는 posix 세마포어 수에 대한 특정 커널 제한이 없습니다.

aix

적어도 버전 5.1에서, 그러한 매개 변수에 대한 특수 구성을 수행 할 필요는 없어야합니다.Shmmax, 이것은 모든 메모리를 공유 메모리로 사용할 수 있도록 구성됩니다. 그것은와 같은 다른 데이터베이스에 일반적으로 사용되는 일종의 구성입니다.DB/2.

그러나 글로벌 수정이 필요할 수 있습니다ulimit정보/etc/security/limits, 파일 크기의 기본 하드 제한 (로서 기본 하드 제한fsize) 및 파일 번호 (nofiles) 너무 낮을 수 있습니다.

freebsd

기본 IPC 설정은를 사용하여 변경할 수 있습니다.sysctl또는로더인터페이스. 다음 매개 변수는를 사용하여 설정할 수 있습니다.sysctl:

# sysctl kern.ipc.shmall = 32768
# sysctl kern.ipc.shmmax = 134217728

이러한 설정을 재부팅보다 계속 유지하려면 수정/etc/sysctl.conf.

이 세마포어 관련 설정은까지 읽기 전용입니다.sysctl관련이 있지만 설정할 수 있습니다/boot/loader.conf:

kern.ipc.semmni = 256kern.ipc.semmns = 512

해당 파일을 수정 한 후 새 설정이 적용하려면 재부팅이 필요합니다.

공유 메모리를 RAM에 잠그고 교환으로 인해 정지되지 않도록 토토 캔을 구성 할 수도 있습니다. 이것은를 사용하여 달성 할 수 있습니다.sysctl설정kern.ipc.shm_use_phys.

활성화하여 freebsd 교도소에서 달리는 경우sysctl'ssecurity.jail.sysvipc_allowed, Postmaster다른 교도소에서 달리는 것은 다른 운영 체제 사용자가 운영해야합니다. 이는 뿌리가 아닌 사용자가 다른 교도소의 공유 메모리 또는 세마포어를 방해하지 않기 때문에 보안을 향상 시키며 토토 캔 IPC 정리 코드가 올바르게 작동 할 수 있습니다.

freebsd4.0 전의 버전은 오래된 것처럼 작동합니다OpenBSD(아래 참조).

netbsd

innetbsd5.0 이상, IPC 매개 변수를 사용하여 조정할 수 있습니다sysctl, 예 :

# sysctl -w kern.ipc.semmni = 100

이러한 설정을 재부팅보다 계속 유지하려면 수정/etc/sysctl.conf.

일반적으로 증가하고 싶을 것입니다kern.ipc.semmniandkern.ipc.semmns, asnetbsd이들에 대한 기본 설정은 불편하게 작습니다.

공유 메모리를 RAM에 잠그고 교환으로 인해 정지되지 않도록 토토 캔을 구성 할 수도 있습니다. 이것은를 사용하여 달성 할 수 있습니다.sysctl설정kern.ipc.shm_use_phys.

netbsd5.0 전의 버전은 오래된 것처럼 작동합니다OpenBSD(아래 참조), 커널 매개 변수를 키워드로 설정해야한다는 점을 제외하고옵션not옵션.

OpenBSD

inOpenBSD3.3 이상, IPC 매개 변수를 사용하여 조정할 수 있습니다sysctl, 예 :

# sysctl kern.seminfo.semmni = 100

이러한 설정을 재부팅보다 계속 유지하려면 수정/etc/sysctl.conf.

일반적으로 증가하고 싶을 것입니다inandin, asOpenBSD이들에 대한 기본 설정은 불편하게 작습니다.

나이OpenBSD버전은 IPC 매개 변수를 변경하려면 사용자 정의 커널을 빌드해야합니다. 옵션을 확인하십시오SYSVSHMandSYSVSEM도 활성화되어 있습니다. 다음은 토토 캔 구성 파일에서 다양한 매개 변수를 설정하는 방법의 예를 보여줍니다.

옵션 sysvshm옵션 shmmaxpgs = 4096
hp-ux

기본 설정은 일반 설치에 충분한 경향이 있습니다. 에hp-ux10, 공장 기본값SEMMNS는 128입니다. 더 큰 데이터베이스 사이트에서는 너무 낮을 수 있습니다.

IPC매개 변수를 설정할 수 있습니다시스템 관리 관리자 (SAM) 아래토토 캔 구성구성 가능한 매개 변수. 선택하다새 토토 캔 만들기완료되면.

Linux

기본 최대 세그먼트 크기는 32MB이고 기본 최대 총 크기는 2097152 페이지입니다. 페이지는 거의 항상 4096 바이트입니다.거대한 페이지(사용getConf page_size확인하려면).

공유 메모리 크기 설정은를 통해 변경할 수 있습니다.sysctl인터페이스. 예를 들어, 16GB를 허용하려면 :

$ sysctl -w kernel.shmmax = 17179869184
$ sysctl -w kernel.shmall = 4194304

이 설정은 파일의 재부팅 사이에 보존 될 수 있습니다/etc/sysctl.conf. 그렇게하는 것이 좋습니다.

고대 분포가 없을 수도 있습니다sysctl프로그램이지만 동등한 변경 사항을 조작하여 동등한 변경을 수행 할 수 있습니다./Proc파일 시스템 :

$ echo 17179869184/proc/sys/kernel/shmmax
$ echo 4194304/proc/sys/kernel/shmall

나머지 기본값의 크기는 상당히 관대하며 일반적으로 변경이 필요하지 않습니다.

MacOS

MacOS에서 공유 메모리를 구성하는 권장되는 방법은 이름이 지정된 파일을 작성하는 것입니다/etc/sysctl.conf, 다음과 같은 가변 할당을 포함하는

kern.sysv.shmmax = 4194304kern.sysv.shmmin = 1

일부 MACOS 버전에서모두 5공유 메모리 매개 변수를 설정해야합니다/etc/sysctl.conf, 그렇지 않으면 값이 무시됩니다.

최근의 MacOS 릴리스가 설정 시도를 무시한다고 조심하십시오Shmmax4096의 정확한 배수가 아닌 값으로.

Shmall이 플랫폼의 4KB 페이지로 측정됩니다.

이전 MACOS 버전에서는 공유 메모리 매개 변수를 변경하려면 재부팅해야합니다. 10.5 현재 모든 것을 바꿀 수 있습니다shmmni즉시sysctl. 그러나 여전히 선호하는 값을 설정하는 것이 가장 좋습니다/etc/sysctl.conf, 값이 재부팅에 걸쳐 유지되도록합니다.

파일/etc/sysctl.confMACOS 10.3.9 이상에서만 영광입니다. 이전 10.3.x 릴리스를 실행중인 경우 파일을 편집해야합니다/etc/rc다음 명령에서 값을 변경합니다.

sysctl -w kern.sysv.shmmaxsysctl -w kern.sysv.shmin

참고/etc/rc는 일반적으로 MacOS 시스템 업데이트에 의해 덮어 쓰기 때문에 각 업데이트 후에 이러한 편집을 다시해야 할 것으로 예상됩니다.

MacOS 10.2 이상에서 파일 에서이 명령을 편집/System/Library/StartUpitems/SystemTuning/SystemTuning.

Solaris2.6 ~ 2.9 (Solaris 6에서 Solaris 9)

관련 설정을 변경할 수 있습니다/etc/system, 예 :

SET SHMSYS : SHMINFO_SHMMAX = 0x2000000SHMSS를 설정하십시오 : SHMINFO_SHMMIN = 1

변경 사항이 적용되도록 재부팅해야합니다. 참조 참조또는Solaris의 이전 버전에서 공유 메모리에 대한 정보.

Solaris2.10 (Solaris 10) 이상
Opensolaris

Solaris 10 이후에서, 그리고 Opensolaris에서, 기본 공유 메모리와 세마포어 설정은 대부분의 경우 충분합니다토토 캔응용 프로그램. Solaris는 이제 a에 기본값을Shmmax시스템의 1/4RAM. 이 설정을 추가로 조정하려면와 관련된 프로젝트 설정을 사용하십시오.Postgres사용자. 예를 들어 다음을로 실행합니다.루트:

projadd -c "토토 캔 db user"-k "project.max -shm -memory = (권한, 8GB, 거부)"-u postgres -g postgres user.postgres

이 명령은를 추가합니다.user.postgres프로젝트 및 공유 메모리를 최대로 설정하고Postgres사용자가 8GB로, 다음에 사용자 로그인 할 때 또는 다시 시작할 때토토 캔(다시로드 아님). 위의 내용은토토 캔Postgres사용자의 사용자Postgres그룹. 서버 재부팅이 필요하지 않습니다.

다른 권장 커널 설정 데이터베이스 서버의 연결이 많은 연결이 있습니다.

project.max-shm-ids = (priv, 32768, deny)project.max-sem-ids = (priv, 4096, deny)

또한 실행중인 경우토토 캔영역 내부에서는 영역 자원 사용 제한을 높여야 할 수도 있습니다. "2 장 : 프로젝트 및 작업"을 참조하십시오시스템 관리자 안내서자세한 내용은프로젝트andprctl.

18.4.2. systemd remobipc

ifSystemD사용 중이며, 운영 체제에 의해 IPC 리소스 (공유 메모리 포함)가 조기에 제거되지 않도록주의해야합니다. 이것은 소스에서 토토 캔을 설치할 때 특히 문제가됩니다.Postgres사용자는 일반적으로 시스템 사용자로 생성됩니다.

설정removeipcinin사용자가 완전히 로그 아웃 할 때 IPC 객체가 제거되는지 여부를 제어합니다. 시스템 사용자는 면제됩니다.SystemD, 그러나 일부 운영 체제 배포판은 꺼짐으로 기본적으로 배포됩니다.

이 설정이 켜져있을 때 일반적인 관찰 된 효과는 병렬 쿼리 실행에 사용되는 공유 메모리 객체가 명백히 임의의 시간에 제거되어 오류와 경고로 이어지는 동안

경고 : 공유 메모리 세그먼트를 제거 할 수 없습니다

다른 유형의 IPC 객체 (공유 메모리 vs. 세마포어, 시스템 V 대 Posix)는 약간 다르게 처리됩니다SystemD, 따라서 일부 IPC 리소스가 다른 IPC 리소스가 다른 방식으로 제거되지 않음을 알 수 있습니다. 그러나 이러한 미묘한 차이에 의존하는 것은 권장하지 않습니다.

A 사용자 로깅관리자가 관리자가 로그인 할 때 유지 보수 작업의 일부로 발생할 수 있습니다Postgres사용자 또는 이와 유사한 것이므로 일반적으로 방지하기가 어렵습니다.

A시스템 사용자에서 결정됩니다SystemDSYS_UID_MAX설정/etc/login.defs.

포장 및 배포 스크립트를 신중해야Postgres사용하여 시스템 사용자로서 사용자로서userAdd -r, Adduser -시스템또는 동등한.

또는 사용자 계정을 잘못 만들거나 변경할 수없는 경우 설정하는 것이 좋습니다

removeipc = no

in/etc/systemd/logind.conf또는 다른 적절한 구성 파일.

주의

이 두 가지 중 하나 이상이 보장되어야합니다. 그렇지 않으면 토토 캔 서버는 매우 신뢰할 수 없습니다.

18.4.3. 자원 제한

UNIX- 유사 운영 체제는 귀하의 운영을 방해 할 수있는 다양한 종류의 자원 제한을 시행합니다토토 캔서버. 특히 중요한 것은 사용자 당 프로세스 수, 프로세스 당 열린 파일 수 및 각 프로세스에 사용할 수있는 메모리 량에 대한 제한입니다.하드및 A소프트제한. 소프트 한계는 실제로 중요하지만 사용자는 하드 제한까지 변경할 수 있습니다.setRlimit이 매개 변수를 설정할 책임이 있습니다. 쉘의 내장 명령ulimit(Bourne Shells) 또는Limit (CSH)는 명령 줄에서 자원 제한을 제어하는 ​​데 사용됩니다. BSD 유래 시스템에서 파일/etc/login.conf로그인 중에 설정된 다양한 자원 제한을 제어합니다. 자세한 내용은 운영 체제 문서를 참조하십시오.MaxProc, OpenFilesDataSize. 예를 들어:

기본값 : \...

(-cur는 소프트 한계입니다. 부록-max하드 제한을 설정하려면)

토토 캔은 일부 리소스에 시스템 전체 제한을 가질 수 있습니다.

  • onLinux커널 매개 변수fs.file-max커널이 지원할 최대 열린 파일 수를 결정합니다. 로 변경할 수 있습니다.sysctl -w fs.file -max =N. 재부팅에 따라 설정이 지속 되려면에 과제를 추가하십시오./etc/sysctl.conf. 프로세스 당 파일의 최대 한계는 커널이 컴파일 될 때 고정됩니다./usr/src/linux/documentation/proc.txt자세한 내용은

the토토 캔서버는 연결 당 하나의 프로세스를 사용하므로 다른 시스템의 나머지 부분에 필요한 것 외에도 허용되는 연결만큼 많은 프로세스를 제공해야합니다. 이것은 일반적으로 문제가되지 않지만 하나의 컴퓨터에서 여러 서버를 실행하면 상황이 빡빡해질 수 있습니다.

열기 파일의 공장 기본 제한이 종종 설정됩니다사회적으로 친절한많은 사용자가 부적절한 시스템 리토토 캔의 일부를 사용하지 않고 기계에 공존 할 수있는 값. 컴퓨터에서 많은 서버를 실행하면 아마도 원하는 것이지만 전용 서버에서는이 제한을 높이고 싶을 수도 있습니다.

동전의 반대편에서 일부 시스템은 개별 프로세스가 많은 파일을 열도록 허용합니다. 몇 가지 이상의 프로세스가 그렇게되면 시스템 전체의 한계를 쉽게 초과 할 수 있습니다.토토 캔'smax_files_per_process개방형 파일의 소비를 제한하기위한 구성 매개 변수.

많은 수의 클라이언트 연결을 지원할 때 우려 될 수있는 또 다른 토토 캔 제한은 최대 소켓 연결 큐 길이입니다. 많은 연결 요청이 매우 짧은 기간 내에 도착하면 우체국 장이 요청을 서비스하기 전에 일부는 거부 당할 수 있으며, 해당 클라이언트는와 같은 도움이되지 않는 연결 실패 오류를 받고 있습니다.자원을 일시적으로 사용할 수 없음또는연결 거부. 기본 대기열 길이 한계는 많은 플랫폼에서 128입니다.sysctl, 그런 다음 우체국 장을 다시 시작하십시오. 매개 변수는 다양하게 명명되었습니다net.core.somaxconnOn Linux,kern.ipc.socceptque새로운 freebsd에서kern.ipc.somaxconnMACOS 및 기타 BSD 변형에서

18.4.4. Linux Memory Overcommit

Linux 2.4 이상에서 기본 가상 메모리 동작은토토 캔. 토토 캔이 메모리 오버 커뮤지트를 구현하는 방식으로 인해 토토 캔이 종료 될 수 있습니다.토토 캔메모리가 어느 쪽이든 요구하는 경우토토 캔또는 다른 프로세스는 시스템이 가상 메모리가 부족하게됩니다.

이런 일이 발생하면 이와 같이 보이는 토토 캔 메시지가 표시됩니다 (그러한 메시지를 찾을 위치에 대한 시스템 문서 및 구성을 참조하십시오) :.

메모리 밖 : 죽인 프로세스 12345 (Postgres).

이것은임을 나타냅니다.Postgres메모리 압력으로 인해 프로세스가 종료되었습니다. 기존 데이터베이스 연결은 정상적으로 계속 작동하지만 새로운 연결은 허용되지 않습니다.토토 캔다시 시작해야합니다.

이 문제를 피하는 한 가지 방법은 실행하는 것입니다토토 캔다른 프로세스가 메모리에서 기계를 실행하지 않도록 할 수있는 기계의 경우. 메모리가 단단 해지면 운영 체제의 스왑 공간을 늘리는 것이 문제를 피하는 데 도움이 될 수 있습니다. OOM (Memory of Memory) 킬러는 물리적 메모리와 스왑 공간이 소진 될 때만 호출되기 때문입니다..

if토토 캔자체는 메모리가 부족한 시스템의 원인이므로 구성을 변경하여 문제를 피할 수 있습니다. 경우에 따라 메모리 관련 구성 매개 변수를 낮추는 데 도움이 될 수 있습니다.shared_buffersandwork_mem. 다른 경우에는 데이터베이스 서버 자체에 너무 많은 연결을 허용함으로써 문제가 발생할 수 있습니다.max_connections대신 외부 연결-풀링 소프트웨어를 사용하십시오.

Linux 2.6 이상에서 커널의 동작을 수정하여 그렇지 않도록오버 커밋메모리. 이 설정은를 방지하지는 않지만OOM Killer완전히 호출되지 않으면 기회가 크게 줄어들어 더 강력한 시스템 동작으로 이어질 것입니다. 이것은 엄격한 오버 커미트 모드를 통해를 선택하여 수행됩니다.sysctl:

sysctl -w vm.overcommit_memory = 2

또는 동등한 항목 배치/etc/sysctl.conf. 관련 설정을 수정하고 싶을 수도 있습니다vm.overcommit_ratio. 자세한 내용은 커널 문서 파일을 참조하십시오.오버 커미트 계정.

변경 유무에 관계없이 사용할 수있는 또 다른 접근법vm.overcommit_memory, 프로세스 별을 설정하는 것입니다OOM 점수 조정포스트 마스터 프로세스에 대한 가치-1000, 따라서 OOM 킬러의 대상이되지 않을 것을 보장합니다. 이것을하는 가장 간단한 방법은 실행하는 것입니다

echo -1000/proc/self/oom_score_adj

Postmaster의 시작 스크립트에서 우체국을 호출하기 직전. 이 조치는 근본으로 수행되어야합니다. 그렇지 않으면 효과가 없습니다.

Export pg_oom_adjust_file =/proc/self/oom_score_adj내보내기 pg_oom_adjust_value = 0

이러한 설정으로 인해 우체국 마스터 아동 프로세스는 정상적인 OOM 점수 조정 0으로 실행되므로 OOM 킬러가 여전히 필요에 따라 타겟팅 할 수 있습니다. 다른 값을 사용할 수 있습니다pg_oom_adjust_value자식 프로세스가 다른 OOM 점수 조정으로 실행되도록하려는 경우. (pg_oom_adjust_value생략 할 수 있습니다.이 경우 기본값은 0으로 표시됩니다.) 설정하지 않으면pg_oom_adjust_file, 자식 프로세스는 우체국 장과 동일한 OOM 점수 조정으로 실행됩니다. 이는 우체국이 우선적 인 설정을 갖도록하는 것이기 때문에 현명하지 않습니다..

구형 Linux 커널은 제공하지 않습니다/proc/self/oom_score_adj이지만 이전 버전의 동일한 기능이를 가질 수 있습니다./proc/self/oom_adj. 이것은 비활성화 값이를 제외하고 동일하게 작동합니다.-17not-1000.

note

일부 공급 업체의 Linux 2.4 커널은 2.6 오버 커뮤지트의 초기 버전이있는 것으로보고되었습니다sysctl매개 변수. 그러나 설정vm.overcommit_memory2 ~ 2는 상황을 악화시키지 않습니다. 실제 토토 캔 소스 코드를 검사하는 것이 좋습니다 (함수 참조vm_enough_memory파일에서mm/mmap.c) 2.4 설치로 시도하기 전에 토토 캔에서 지원되는 내용을 확인하십시오. 의 존재오버 커미트 계정문서화 파일not기능이 있다는 증거로 간주됩니다. 의심 할 여지없이 커널 전문가 또는 커널 공급 업체를 참조하십시오.

18.4.5. Linux 거대한 페이지

거대한 페이지를 사용하면 큰 연속 메모리 덩어리를 사용할 때토토 캔특히 큰 값을 사용할 때.shared_buffers. 이 기능을 사용하려면토토 캔config_hugetlbfs = yandconfig_hugetlb_page = y. 커널 설정을 조정해야합니다vm.nr_hugepages. 필요한 거대한 페이지의 수를 추정하려면 시작토토 캔거대한 페이지없이 활성화하고 우체국 장 마스터를 확인하십시오vmpeak값과 시스템의 거대한 페이지 크기를 사용하여/Proc파일 시스템. 이것은 다음과 같습니다 :

$ 헤드 -1 $ pgdata/postmaster.pid4170$grep ^vmpeak/proc/4170/statusVMPEAK : 6490428 KB$grep ^mugypagesize /proc /meminfoMuglePagesize : 2048 KB

6490428 / 2048대략 제공3169.154,이 예에서는 적어도이 필요합니다.3170우리가 설정할 수있는 거대한 페이지 :

$ sysctl -w vm.nr_hugepages = 3170

컴퓨터의 다른 프로그램에 큰 페이지가 필요한 경우 더 큰 설정이 적절할 것입니다. 이 설정을 추가하는 것을 잊지 마십시오/etc/sysctl.conf재부팅 후에 다시 적용되도록.

때로는 커널이 원하는 거대한 페이지를 즉시 할당 할 수 없으므로 명령을 반복하거나 재부팅해야 할 수도 있습니다. (재부팅 직후, 대부분의 기계 메모리는 거대한 페이지로 변환 할 수 있어야합니다.) 거대한 페이지 할당 상황을 확인하려면 다음을 사용하십시오.

$ grep mgy /proc /meminfo

데이터베이스 서버의 운영 체제 사용자 권한을 설정하여 거대한 페이지를 사용할 수있는 권한을 부여해야 할 수도 있습니다vm.hugetlb_shm_groupviasysctl및/또는 메모리 잠금 허가를ulimit -l.

거대한 페이지의 기본 동작토토 캔가능하면 그것들을 사용하고 실패 할 때 일반 페이지로 돌아가는 것입니다. 거대한 페이지의 사용을 시행하려면 설정할 수 있습니다migne_pagestooninPostgres. 이 설정으로토토 캔충분한 페이지를 사용할 수 없으면 시작하지 못할 것입니다.

에 대한 자세한 설명은Linux거대한 페이지 기능을 살펴보십시오Documentation.