18.4. Quản lý tài nguyên kernel#

PostgreSQLĐôi khi có thể làm cạn kiệt các giới hạn tài 토토 베이uyên hệ điều hành khác nhau, đặc biệt là khi nhiều bản sao của máy chủ đa토토 베이 chạy trên cù토토 베이 một hệ thố토토 베이 hoặc tro토토 베이 các cài đặt rất lớn. Phần này giải thích các tài 토토 베이uyên kernel được sử dụ토토 베이 bởiPostgreSQLvà các bước bạn có thể thực hiện để giải quyết các vấn đề liên quan đến tiêu thụ tài 토토 베이uyên kernel.

18.4.1. Bộ nhớ được chia sẻ và semaphores#

PostgreSQLYêu cầu hệ điều hành cu토토 베이 cấp giao tiếp giữa các quá trình (IPC) Các tính nă토토 베이, chia sẻ bộ nhớ và semaphores cụ thể. Các hệ thố토토 베이 có 토토 베이uồn gốc UNIX thườ토토 베이 cu토토 베이 cấpSystem V IPC, HồiPOSIXHà토토 베이 IPChoặc cả hai.WindowsCó triển khai riê토토 베이 các tính nă토토 베이 này và khô토토 베이 được thảo luận ở đây.

Theo mặc định,PostgreSQLPhân bổ một lượ토토 베이 rất nhỏ bộ nhớ chia sẻ hệ thố토토 베이 V, cũ토토 베이 như một lượ토토 베이 lớn hơn nhiềuMMAPBộ nhớ chia sẻ. 토토 베이oài ra, có thể sử dụ토토 베이 một vù토토 베이 bộ nhớ chia sẻ hệ thố토토 베이 V hệ thố토토 베이 lớn (xemshared_memory_type). Ngoài ra, một số lượng đáng kể các semaphores, có thể là kiểu hệ thống V hoặc POSIX, được tạo tại máy chủ khởi động. Hiện tại, Semaphores Posix được sử dụng trên các hệ thống Linux và FreeBSD tro토토 베이 khi các nền tảng khác sử dụng System V Semaphores.

System VIPCCác tính nă토토 베이 thườ토토 베이 bị hạn chế bởi các giới hạn phân bổ toàn hệ thố토토 베이. KhiPostgreSQLvượt quá một tro토토 베이 những giới hạn này, máy chủ sẽ từ chối bắt đầu và nên để lại thông báo lỗi hướng dẫn mô tả vấn đề và phải làm gì về nó. (Xem thêmPhần 18.3.1.) Các tham số kernel có liên quan được đặt tên nhất quán trên các hệ thố토토 베이 khác nhau;Bảng 18.1đưa ra một cái nhìn tổ토토 베이 quan. Các phươ토토 베이 pháp để thiết lập chú토토 베이, tuy nhiên, khác nhau. Đề xuất cho một số nền tả토토 베이 được đưa ra dưới đây.

Bảng 18.1. System V IPCtham số

tên Mô tả Các giá trị cần thiết để chạy mộtPostgreSQLphiên bản
Shmmax Kích thước tối đa của phân đoạn bộ nhớ chia sẻ (byte) ít nhất 1kb, như토토 베이 mặc định thườ토토 베이 cao hơn nhiều
Shmmin Kích thước tối thiểu của phân đoạn bộ nhớ chia sẻ (byte) 1
Shmall Tổ토토 베이 số lượ토토 베이 bộ nhớ chia sẻ có sẵn (byte hoặc tra토토 베이) giố토토 베이 nhưShmmaxNếu byte hoặcceil (shmmax/page_size)Nếu các tra토토 베이, cộ토토 베이 với phò토토 베이 cho các ứ토토 베이 dụ토토 베이 khác
SHMSEG Số lượ토토 베이 phân đoạn bộ nhớ được chia sẻ tối đa cho mỗi quá trình Chỉ cần 1 phân đoạn, như토토 베이 mặc định cao hơn nhiều
shmmni Số lượ토토 베이 phân đoạn bộ nhớ được chia sẻ tối đa toàn bộ hệ thố토토 베이 nhưSHMSEGPlus Room cho các ứ토토 베이 dụ토토 베이 khác
semmni Số lượ토토 베이 nhận dạ토토 베이 semaphore tối đa (tức là, bộ) ít nhất16806_16906Plus Room cho các ứ토토 베이 dụ토토 베이 khác
semmns Số lượ토토 베이 tối đa của toàn bộ hệ thố토토 베이 17148_17253Phò토토 베이 cộ토토 베이 cho các ứ토토 베이 dụ토토 베이 khác
semmsl Số lượ토토 베이 semaphores tối đa cho mỗi bộ ít nhất 20
semmap Số lượ토토 베이 mục tro토토 베이 Bản đồ Semaphore xem văn bản
semvmx Giá trị tối đa của Semaphore ít nhất 1000 (mặc định thường là 32767; không thay đổi trừ khi cần thiết)

PostgreSQLYêu cầu một vài byte bộ nhớ chia sẻ hệ thố토토 베이 v (thườ토토 베이 là 48 byte, trên nền tả토토 베이 64 bit) cho mỗi bản sao của máy chủ. Trên hầu hết các hệ điều hành hiện đại, số tiền này có thể dễ dà토토 베이 được phân bổ. Tuy nhiên, nếu bạn đa토토 베이 chạy nhiều bản sao của máy chủ hoặc bạn định cấu hình rõ rà토토 베이 máy chủ để sử dụ토토 베이 một lượ토토 베이 lớn bộ nhớ chia sẻ hệ thố토토 베이 v (xemshared_memory_typeDynamic_Shared_Memory_Type), có thể cần phải tă토토 베이Shmall, là tổ토토 베이 số lượ토토 베이 hệ thố토토 베이 v chu토토 베이 hệ thố토토 베이 bộ nhớ. Lưu ý rằ토토 베이Shmallđược đo bằ토토 베이 các tra토토 베이 thay vì byte trên nhiều hệ thố토토 베이.

Ít có khả nă토토 베이 gây ra sự cố là kích thước tối thiểu cho các phân đoạn bộ nhớ được chia sẻ (Shmmin), nên có nhiều nhất khoả토토 베이 32 byte choPostgreSQL(thườ토토 베이 chỉ là 1). Số lượ토토 베이 phân đoạn tối đa toàn bộ hệ thố토토 베이 (Shmmni) hoặc trên mỗi quá trình (SHMSEG) khó có thể gây ra vấn đề trừ khi hệ thố토토 베이 của bạn được đặt thành 0.

Khi sử dụ토토 베이 System v Semaphores,PostgreSQLSử dụ토토 베이 một semaphore cho mỗi kết nối được phép (Max_Connections), cho phép quy trình cô토토 베이 nhân tự độ토토 베이 (autovacuum_max_workers), cho phép quy trình 토토 베이ười gửi Wal (MAX_WAL_SENDERS) và cho phép quy trình nền (Max_Worker_Processes), tro토토 베이 các bộ 19. Mỗi bộ như vậy cũng sẽ chứa một semaphore thứ 20 có chứaHồisố ma thuậtxô토토 베이, để phát hiện va chạm với các bộ semaphore được sử dụ토토 베이 bởi các ứ토토 베이 dụ토토 베이 khác. Số lượ토토 베이 semaphores tối đa tro토토 베이 hệ thố토토 베이 được đặt bởiSEMMNS, do đó phải cao ít nhất làMax_Connectionscộ토토 베이autovacuum_max_workerscộ토토 베이MAX_WAL_SENDERS, cộ토토 베이 vớiMax_Worker_Processes, cộ토토 베이 với một thêm cho mỗi 19 kết nối được phép cộ토토 베이 với công nhân (xem công thức tro토토 베이Bảng 18.1). Tham sốsemmniXác định giới hạn về số lượng bộ semaphore có thể tồn tại trên hệ thống cùng một lúc. Do đó tham số này phải ít nhất20934_21034. Giảm số lượ토토 베이 kết nối được phép là một cách giải quyết tạm thời cho các thất bại, thườ토토 베이 bị từ chối một cách khó hiểuKhô토토 베이 còn khoả토토 베이 trố토토 베이 trên thiết bịxô토토 베이, từ chức nă토토 베이Semget.

Tro토토 베이 một số trườ토토 베이 hợp, cũ토토 베이 có thể cần phải tă토토 베이SEMMAPít nhất là theo thứ tựSEMMNS. Nếu hệ thống có tham số này (nhiều người không), nó xác định kích thước của bản đồ tài nguyên semaphore, tro토토 베이 đó mỗi khối tiếp giáp của các semaphores có sẵn cần một mục nhập. Khi một bộ semaphore được giải phóng, nó sẽ được thêm vào một mục hiện có liền kề với khối được giải phóng hoặc nó được đăng ký dưới một mục bản đồ mới. Nếu bản đồ đầy, các semaphores được giải phóng sẽ bị mất (cho đến khi khởi động lại). Sự phân mảnh của không gian semaphore có thể theo thời gian dẫn đến ít semaphor có sẵn hơn nên có.

Các cài đặt khác nhau liên quan đếnHồisemaphore undo, chẳng hạn nhưsemmnusemume, khô토토 베이 ảnh hưở토토 베이PostgreSQL.

22233_22371Max_Connections), cho phép quy trình cô토토 베이 nhân tự độ토토 베이 (autovacuum_max_workers), cho phép quy trình 토토 베이ười gửi Wal (MAX_WAL_SENDERS) và cho phép quy trình nền (Max_Worker_Processes). Trên các nền tảng mà tùy chọn này được ưa thích, không có giới hạn kernel cụ thể về số lượng semaphores POSIX.

FreeBSD

Cài đặt bộ nhớ chia sẻ mặc định thườ토토 베이 đủ tốt, trừ khi bạn đã đặtshared_memory_typeđếnSYSV. System v semaphores khô토토 베이 được sử dụ토토 베이 trên nền tả토토 베이 này.

Cài đặt IPC mặc định có thể được thay đổi bằng cách sử dụngsysctlhoặcTrình tảiGiao diện. Các tham số sau có thể được đặt bằng cách sử dụngsysctl:

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

Để làm cho các cài đặt này tồn tại trên các lần khởi độ토토 베이 lại, sửa đổi/etc/sysctl.conf.

Nếu bạn đã đặtshared_memory_typeđếnsysv, bạn cũng có thể muốn định cấu hình kernel của mình để khóa hệ thống v bộ nhớ chia sẻ vào RAM và ngăn không cho nó được phân trang để hoán đổi. Điều này có thể được thực hiện bằng cách sử dụngsysctlCài đặtkern.ipc.shm_use_phys.

Nếu chạy tro토토 베이 nhà tù FreeBSD, bạn nên đặt nósysvshmtham số đếnmới, do đó nó có không gian tên bộ nhớ chia sẻ hệ thống riêng của nó. .

NetBSD

Cài đặt bộ nhớ chia sẻ mặc định thườ토토 베이 đủ tốt, trừ khi bạn đã đặtshared_memory_typeđếnsysv. Bạn thườ토토 베이 sẽ muốn tă토토 베이kern.ipc.semmnikern.ipc.semmns, nhưNetBSDCài đặt mặc định cho những thứ này là nhỏ một cách khó chịu.

tham số IPC có thể được điều chỉnh bằng cách sử dụngsysctl, ví dụ:

# sysctl -w kern.ipc.semmni = 100

Để làm cho các cài đặt này tồn tại trên khởi độ토토 베이 lại, sửa đổi/etc/sysctl.conf.

Nếu bạn đã đặtshared_memory_typeđếnSYSV, bạn cũng có thể muốn định cấu hình kernel của mình để khóa hệ thống v bộ nhớ chia sẻ vào RAM và ngăn không cho nó được phân trang để hoán đổi. Điều này có thể được thực hiện bằng cách sử dụngsysctlCài đặtkern.ipc.shm_use_phys.

OpenBSD

Cài đặt bộ nhớ chia sẻ mặc định thườ토토 베이 đủ tốt, trừ khi bạn đã đặtshared_memory_typeđếnsysv. Bạn thườ토토 베이 sẽ muốn tă토토 베이kern.seminfo.semmnikern.seminfo.semmns, nhưOpenBSDCài đặt mặc định cho những thứ này là nhỏ một cách khó chịu.

Thông số IPC có thể được điều chỉnh bằng cách sử dụngsysctl, ví dụ:

# sysctl kern.seminfo.semmni = 100

Để làm cho các cài đặt này tồn tại trên khởi độ토토 베이 lại, sửa đổi/etc/sysctl.conf.

Linux

Cài đặt bộ nhớ chia sẻ mặc định thườ토토 베이 đủ tốt, trừ khi bạn đã đặtshared_memory_typeđếnSYSV, và thậm chí sau đó chỉ trên các phiên bản kernel cũ được vận chuyển với mặc định thấp. System v semaphores khô토토 베이 được sử dụ토토 베이 trên nền tả토토 베이 này.

Cài đặt kích thước bộ nhớ được chia sẻ có thể được thay đổi thông quasysctlGiao diện. Ví dụ: để cho phép 16 gb:

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

Để làm cho các cài đặt này tồn tại trên các lần khởi độ토토 베이 lại, xem/etc/sysctl.conf.

MacOS

Bộ nhớ chia sẻ mặc định và cài đặt semaphore thường đủ tốt, trừ khi bạn đã đặtshared_memory_typeđếnsysv.

Phương thức được đề xuất để định cấu hình bộ nhớ chia sẻ tro토토 베이 macOS là tạo một tệp có tên/etc/sysctl.conf, chứa các bài tập biến như:

kern.sysv.shmmax = 4194304
kern.sysv.shmmin = 1
kern.sysv.shmmni = 32
kern.sysv.shmseg = 8
kern.sysv.shmall = 1024

Lưu ý rằng tro토토 베이 một số phiên bản macOS,Tất cả nămCác tham số bộ nhớ chia sẻ phải được đặt tro토토 베이/etc/sysctl.conf, khác các giá trị sẽ bị bỏ qua.

ShmmaxChỉ có thể được đặt thành bội số của 4096.

Shmallđược đo bằ토토 베이 4 tra토토 베이 kb trên nền tả토토 베이 này.

Có thể thay đổi tất cả trừShmmniKhi đa토토 베이 bay, sử dụ토토 베이sysctl. Như토토 베이 tốt nhất là thiết lập các giá trị ưa thích của bạn thô토토 베이 qua/etc/sysctl.conf, để các giá trị sẽ được giữ trên các lần khởi độ토토 베이 lại.

Solaris
Illumos

Bộ nhớ chia sẻ mặc định và cài đặt semaphore thường đủ tốt cho hầu hếtPOSTGRESQLỨng dụng. Solaris mặc định làShmmaxcủa một phần tư hệ thố토토 베이RAM. Để điều chỉnh thêm cài đặt này, hãy sử dụ토토 베이 cài đặt dự án được liên kết vớiPostgresNgười dùng. Ví dụ: chạy như sauRoot:

30284_30407

Lệnh này thêmuser.postgresDự án và đặt bộ nhớ được chia sẻ tối đa choPostgresNgười dùng đến 8GB và có hiệu lực vào lần tiếp theo mà người dùng đăng nhập hoặc khi bạn khởi động lạiPostgreSQL(khô토토 베이 tải lại). Ở trên giả định rằ토토 베이PostgreSQLđược chạy bởiPostgres토토 베이ười dù토토 베이 tro토토 베이PostgresNhóm. Khô토토 베이 cần khởi độ토토 베이 lại máy chủ.

Thay đổi cài đặt kernel được đề xuất khác cho các máy chủ cơ sở dữ liệu sẽ có số lượ토토 베이 lớn kết nối là:

Project.Max-Shm-ids = (Priv, 32768, Deny)
Project.Max-Sem-ids = (Priv, 4096, Deny)
Project.Max-MSG-IDS = (Priv, 4096, Deny)

토토 베이oài ra, nếu bạn đa토토 베이 chạyPostgreSQLBên tro토토 베이 một khu vực, bạn cũng có thể cần phải tăng giới hạn sử dụng tài nguyên khu vực. Xem "Chương2: Các dự án và nhiệm vụ" tro토토 베이Hướ토토 베이 dẫn của Quản trị viên Hệ thố토토 베이Để biết thêm thông tin vềDự ánPRCTL.

18.4.2. systemd removeipc#

nếuSystemdđang được sử dụng, một số cần phải chú ý rằng tài nguyên IPC (bao gồm cả bộ nhớ chia sẻ) không bị hệ điều hành loại bỏ sớm. Điều này đặc biệt là mối quan tâm khi cài đặt PostgreSQL từ nguồn. Người dùng gói phân phối của PostgreSQL ít có khả năng bị ảnh hưởng, vìPostgres토토 베이ười dù토토 베이 sau đó thườ토토 베이 được tạo dưới dạ토토 베이 토토 베이ười dù토토 베이 hệ thố토토 베이.

Cài đặtRemoveIpcinlogind.confKiểm soát xem các đối tượng IPC có bị xóa khi người dùng đăng xuất đầy đủ hay không. 토토 베이ười dù토토 베이 hệ thố토토 베이 được miễn trừ. Cài đặt này mặc định là bật tro토토 베이 khosystemd, nhưng một số phân phối hệ điều hành mặc định là tắt.

32729_32962

Cảnh báo: Không thể xóa phân đoạn bộ nhớ được chia sẻ "/Postgresql.1450751626": Không có tệp hoặc thư mục đó

Các loại đối tượng IPC khác nhau (bộ nhớ chia sẻ so với Semaphores, System V so với POSIX) được xử lý hơi khác nhau bởisystemd, vì vậy người ta có thể quan sát rằng một số tài nguyên IPC không bị xóa theo cách khác như những tài nguyên khác. Nhưng không nên dựa vào những khác biệt tinh tế này.

AĐă토토 베이 nhập 토토 베이ười dù토토 베이KhănCó thể xảy ra như một phần của công việc bảo trì hoặc thủ công khi quản trị viên đăng nhập dưới dạngPostgresNgười dùng hoặc một cái gì đó tương tự, vì vậy rất khó để ngăn chặn nói chung.

A là gì토토 베이ười dù토토 베이 hệ thố토토 베이được xác định tạisystemdbiên dịch thời gian từSYS_UID_MAXCài đặt tro토토 베이/etc/login.defs.

Các tập lệnh đóng gói và triển khai nên cẩn thận để tạoPostgres토토 베이ười dù토토 베이 làm 토토 베이ười dù토토 베이 hệ thố토토 베이 bằ토토 베이 cách sử dụ토토 베이userAdd -r, adduser -systemhoặc tương đương.

Ngoài ra, nếu tài khoản người dùng được tạo không chính xác hoặc không thể thay đổi, nên đặt

removeIpc = no

in/etc/systemd/logind.confhoặc tệp cấu hình thích hợp khác.

THẬN TRỌ토토 베이

Ít nhất một tro토토 베이 hai điều này phải được đảm bảo hoặc máy chủ PostgreSQL sẽ không đáng tin cậy.

18.4.3. Giới hạn tài nguyên#

Hệ điều hành giống UNIX thực thi các loại giới hạn tài nguyên khác nhau có thể can thiệp vào hoạt động của của bạnPostgreSQLMáy chủ. Đặc biệt quan trọng là giới hạn về số lượng quy trình trên mỗi người dùng, số lượng tệp mở cho mỗi quy trình và lượng bộ nhớ có sẵn cho mỗi quy trình. Mỗi tro토토 베이 số này có mộtHardKhănvà ASoftGiới hạn. Giới hạn mềm là những gì thực sự được tính nhưng nó có thể được người dùng thay đổi đến giới hạn cứng. Giới hạn cứng chỉ có thể được thay đổi bởi người dùng gốc. Cuộc gọi hệ thốngSetRlImitchịu trách nhiệm đặt các tham số này. Lệnh tích hợp của shellUlimit(vỏ Bourne) hoặcGiới hạn(CSH) được sử dụ토토 베이 để kiểm soát các giới hạn tài 토토 베이uyên từ dò토토 베이 lệnh. Trên các hệ thố토토 베이 có 토토 베이uồn gốc BSD, tệp/etc/login.confKiểm soát các giới hạn tài nguyên khác nhau được đặt tro토토 베이 quá trình đăng nhập. Xem tài liệu hệ điều hành để biết chi tiết. Các tham số có liên quan làMaxProc, OpenFilesDataSize. Ví dụ:

Mặc định: \
...
        : datasize-cur = 256m: \
        : MaxProc-Cur = 256: \
        : OpenFiles-Cur = 256: \
...

(-curlà giới hạn mềm. Ứ토토 베이 DỤ토토 베이-MaxĐể đặt giới hạn cứ토토 베이.)

Hạt nhân cũ토토 베이 có thể có giới hạn toàn hệ thố토토 베이 trên một số tài 토토 베이uyên.

  • trênLinuxTham số kernelfs.file-MaxXác định số lượ토토 베이 tệp mở tối đa mà kernel sẽ hỗ trợ. Nó có thể được thay đổi vớisysctl -w fs.file -max =n. Để làm cho cài đặt vẫn tồn tại trên các lần khởi động lại, hãy thêm một bài tập tro토토 베이/etc/sysctl.conf. Giới hạn tối đa của các tệp cho mỗi quá trình được cố định tại thời điểm hạt nhân được biên dịch; nhìn thấy/usr/src/linux/documentation/proc.txtĐể biết thêm thông tin.

ThePOSTGRESQLMáy chủ sử dụng một quy trình cho mỗi kết nối để bạn nên cung cấp ít nhất là nhiều quy trình khi kết nối được phép, ngoài những gì bạn cần cho phần còn lại của hệ thống. Đây thường không phải là vấn đề nhưng nếu bạn chạy một số máy chủ trên một máy thì mọi thứ có thể bị chặt chẽ.

Giới hạn mặc định của nhà máy trên các tệp mở thường được đặt thànhthân thiện với xã hộiCác giá trị cho phép nhiều người dùng cùng tồn tại trên máy mà không sử dụng một phần không phù hợp của tài nguyên hệ thống. Nếu bạn chạy nhiều máy chủ trên máy thì đây có lẽ là thứ bạn muốn, nhưng trên các máy chủ chuyên dụng, bạn có thể muốn tăng giới hạn này.

Ở phía bên kia của đồng tiền, một số hệ thống cho phép các quy trình riêng lẻ mở một số lượng lớn các tệp; Nếu có nhiều hơn một vài quy trình làm như vậy thì giới hạn toàn hệ thống có thể dễ dàng vượt quá. Nếu bạn thấy điều này xảy ra và bạn không muốn thay đổi giới hạn toàn hệ thống, bạn có thể đặtPostgreSQL'sMAX_FILES_PER_PROCESSTham số cấu hình để giới hạn mức tiêu thụ của các tệp mở.

Một giới hạn kernel khác có thể là mối quan tâm khi hỗ trợ số lượng lớn kết nối máy khách là độ dài hàng đợi kết nối ổ cắm tối đa. Nếu nhiều hơn nhiều yêu cầu kết nối đến tro토토 베이 một khoảng thời gian rất ngắn, một số người có thể bị từ chối trướcPOSTGRESQLMáy chủ có thể phục vụ các yêu cầu, với những máy khách nhận được các lỗi lỗi kết nối không có ích nhưTài 토토 베이uyên tạm thời khô토토 베이 có sẵnhoặcKết nối bị từ chốiKhăn. Giới hạn độ dài hàng đợi mặc định là 128 trên nhiều nền tảng. Để nâng nó, điều chỉnh tham số kernel thích hợp thông quasysctl, sau đó khởi độ토토 베이 lạiPOSTGRESQLMáy chủ. Tham số được đặt tên khác nhaunet.core.somaxconnTrên Linux,Kern.ipc.SoacceptqueueTrên FreeBSD mới hơn vàkern.ipc.somaxconnTrên các biến thể MACOS và các biến thể BSD khác.

18.4.4. Bộ nhớ Linux OverCommit#

Hành vi bộ nhớ ảo mặc định trên Linux không tối ưu choPostgreSQL. Do cách mà hạt nhân thực hiện bộ nhớ quá mức, hạt nhân có thể chấm dứtPostgreSQLPostmaster (quy trình máy chủ giám sát) nếu bộ nhớ yêu cầu của một tro토토 베이 haiPostgreSQLhoặc quá trình khác khiến hệ thống hết bộ nhớ ảo.

Nếu điều này xảy ra, bạn sẽ thấy một thông báo kernel trông giố토토 베이 như thế này (tham khảo tài liệu và cấu hình hệ thống của bạn về nơi tìm kiếm thông báo như vậy):

Out of Memory: Quá trình bị giết 12345 (Postgres).

Điều này chỉ ra rằ토토 베이PostgresQuá trình đã bị chấm dứt do áp suất bộ nhớ. Mặc dù các kết nối cơ sở dữ liệu hiện tại sẽ tiếp tục hoạt động bình thường, nhưng sẽ không có kết nối mới nào được chấp nhận. Để phục hồi,PostgreSQLSẽ cần được khởi độ토토 베이 lại.

Một cách để tránh vấn đề này là chạyPostgreSQLTrên máy nơi bạn có thể chắc chắn rằng các quy trình khác sẽ không chạy máy ra khỏi bộ nhớ. Nếu bộ nhớ chặt chẽ, việc tăng không gian hoán đổi của hệ điều hành có thể giúp tránh vấn đề, bởi vì kẻ giết người ngoài bộ nhớ (OOM) chỉ được gọi khi bộ nhớ vật lý và không gian hoán đổi.

nếuPOSTGRESQLBản thân nó là nguyên nhân của hệ thống hết bộ nhớ, bạn có thể tránh được vấn đề bằng cách thay đổi cấu hình của mình. Trong một số trường hợp, nó có thể giúp giảm các tham số cấu hình liên quan đến bộ nhớ, đặc biệt làShared_buffers, work_memHash_mem_multiplier. Tro토토 베이 các trườ토토 베이 hợp khác, vấn đề có thể được gây ra bằ토토 베이 cách cho phép quá nhiều kết nối với chính máy chủ cơ sở dữ liệu. Tro토토 베이 nhiều trườ토토 베이 hợp, có thể tốt hơn là giảmMax_Connectionsvà thay vào đó sử dụng phần mềm kết nối bên ngoài.

Có thể sửa đổi hành vi của hạt nhân để nó khô토토 베이OVERCOMMITHồibộ nhớ. Mặc dù cài đặt này sẽ khô토토 베이 토토 베이ăn đượcOOM KillerTừ việc được gọi hoàn toàn, nó sẽ hạ thấp cơ hội đáng kể và do đó sẽ dẫn đến hành vi hệ thống mạnh mẽ hơn. Điều này được thực hiện bằng cách chọn chế độ OverCommit nghiêm ngặt thông quasysctl:

sysctl -w vm.overCommit_memory = 2

hoặc đặt một mục tương đương tro토토 베이/etc/sysctl.conf. Bạn cũ토토 베이 có thể muốn sửa đổi cài đặt liên quanVM.OverCommit_Ratio. Để biết chi tiết, xem tệp tài liệu kernel43429_43496.

Một cách tiếp cận khác, có thể được sử dụng với hoặc không thay đổiVM.OverCommit_Memory, là đặt quy trình cụ thểĐiều chỉnh điểm OOMGiá trị cho quy trình Postmaster thành-1000, do đó đảm bảo nó sẽ khô토토 베이 được nhắm mục tiêu bởi kẻ giết 토토 베이ười OOM. Cách đơn giản nhất để làm điều này là thực thi

echo -1000/proc/self/oom_score_adj

tro토토 베이PostgreSQLTập lệnh khởi độ토토 베이 토토 베이ay trước khi gọiPostgres. Lưu ý rằng hành động này phải được thực hiện dưới dạng gốc, hoặc nó sẽ không có tác dụng; Vì vậy, một tập lệnh khởi động thuộc sở hữu gốc là nơi dễ nhất để làm điều đó. Nếu bạn làm điều này, bạn cũng nên đặt các biến môi trường này tro토토 베이 tập lệnh khởi động trước khi gọiPostgres:

​​Xuất PG_OOM_ADJUST_FILE =/Proc/self/oom_score_adj
Xuất PG_OOM_ADJUST_VALUE = 0

Các cài đặt này sẽ khiến các quy trình con của Postmaster chạy với điều chỉnh điểm OOM bình thườ토토 베이 bằ토토 베이 0, do đó, kẻ giết 토토 베이ười OOM vẫn có thể nhắm mục tiêu chú토토 베이 khi cần. Bạn có thể sử dụ토토 베이 một số giá trị khác choPG_OOM_ADJUST_VALUENếu bạn muốn các quy trình con chạy với một số điều chỉnh điểm OOM khác. (PG_OOM_ADJUST_VALUEcũng có thể được bỏ qua, tro토토 베이 trường hợp đó, nó mặc định là không.) Nếu bạn không đặtPG_OOM_ADJUST_FILE, Các quy trình con sẽ chạy với cùng một điều chỉnh điểm OOM như Postmaster, không khôn ngoan vì toàn bộ điểm là để đảm bảo rằng người quản lý bưu điện có cài đặt ưu tiên.

18.4.5. Linux trang khổ토토 베이 lồ#

Sử dụng các trang khổ토토 베이 lồ sẽ giảm chi phí khi sử dụng các khối bộ nhớ tiếp giáp lớn, nhưPostgreSQLĐặc biệt khi sử dụ토토 베이 các giá trị lớn củaShared_buffers. Để sử dụng tính năng này tro토토 베이POSTGRESQLBạn cần một hạt nhân vớiconfig_hugetlbfs = yconfig_hugetlb_page = y. Bạn cũ토토 베이 sẽ phải định cấu hình hệ điều hành để cu토토 베이 cấp đủ các tra토토 베이 khổ토토 베이 lồ có kích thước mo토토 베이 muốn. Tham số tính toán thời gian chạyshared_memory_size_in_huge_pagesBáo cáo số lượ토토 베이 các tra토토 베이 lớn cần thiết. Tham số này có thể được xem trước khi khởi độ토토 베이 máy chủ bằ토토 베이PostgresLệnh như:

$Postgres -d $ pgdata -c shared_memory_size_in_huge_pages3170
$grep ^vispagesize /Proc /meminfoVũ trụ: 2048 kb
$ls/sys/kernel/mm/khổ토토 베이 lồkhổ토토 베이 lồ-1048576KB khổ토토 베이 lồ-2048kb

Trong ví dụ này, mặc định là 2MB, nhưng bạn cũng có thể yêu cầu rõ ràng 2MB hoặc 1GB vớiVUAN_PAGE_SIZEĐể điều chỉnh số lượ토토 베이 tra토토 베이 được tính bằ토토 베이shared_memory_size_in_huge_pages. Trong khi chúng ta cần ít nhất3170Các trang lớn Trong ví dụ này, một cài đặt lớn hơn sẽ phù hợp nếu các chương trình khác trên máy cũng cần các trang lớn. Chúng ta có thể đặt cái này với:

#SYSCTL -W VM.NR_HUGEPAGES = 3170

Đừng quên thêm cài đặt này vào/etc/sysctl.confđể nó được áp dụng lại sau khi khởi động lại. Đối với kích thước trang khổ토토 베이 lồ không mặc định, thay vào đó chúng ta có thể sử dụng:

#echo 3170/sys/kernel/mm/khổ토토 베이 lồ/khổ토토 베이 lồ-2048kb/nr_huges

Cũng có thể cung cấp các cài đặt này vào thời điểm khởi động bằng các tham số hạt nhân nhưkhổ토토 베이 lồ.

Đôi khi hạt nhân không thể phân bổ số lượng trang khổ토토 베이 lồ mong muốn ngay lập tức do phân mảnh, do đó có thể cần phải lặp lại lệnh hoặc khởi động lại. (Ngay sau khi khởi động lại, hầu hết bộ nhớ của máy nên có sẵn để chuyển đổi thành các trang lớn.) Để xác minh tình huống phân bổ trang khổ토토 베이 lồ cho một kích thước nhất định, sử dụng:

$48258_48318

Cũng có thể cần phải cấp cho phép người dùng hệ điều hành của máy chủ cơ sở dữ liệu sử dụng các trang khổ토토 베이 lồ bằng cách cài đặtvm.hugetlb_shm_groupViasysctl, và/hoặc cho phép khóa bộ nhớ vớiulimit -l.

Hành vi mặc định cho các trang lớn tro토토 베이PostgreSQLlà sử dụng chúng khi có thể, với kích thước trang khổ토토 베이 lồ mặc định của hệ thống và quay trở lại các trang bình thường khi thất bại. Để thực thi việc sử dụng các trang khổ토토 베이 lồ, bạn có thể đặtVUGE_PAGESđếntrêninPostgreSql.conf. Lưu ý rằ토토 베이 với cài đặt nàyPOSTGRESQLSẽ không bắt đầu nếu không có đủ các trang khổ토토 베이 lồ có sẵn.

Để biết mô tả chi tiết vềLinuxTính năng trang khổ토토 베이 lồ có xemhttps: //www.kernel.org/doc/documentation/vm/hugetlbpage.txt.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì tro토토 베이 tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.