บริบท: เว็บเซิร์ฟเวอร์ที่โฮสต์บน DigitalOcean พร้อมฐานข้อมูล PostgreSQL
เราประสบปัญหาฐานข้อมูลล่มซ้ำซากโดยไม่ทราบสาเหตุ ในที่สุดฉันก็พบข้อความค้นหาที่ผิดพลาดซึ่งทำให้ระบบทำงานหนักเกินไป และเกือบจะแน่ใจว่านั่นคือปัญหา
อย่างไรก็ตาม ขณะที่ฉันกำลังตรวจสอบการขัดข้องของ postgres ฉันพบไฟล์ โพสต์ กล่าวถึงการปรับแต่งระบบ kernel.shmmax
เพราะมันเกี่ยวข้องกับการตั้งค่า postgres แชร์_บัฟเฟอร์
.
เปิดออกเมื่อฉันวิ่ง แมว /proc/sys/kernel/shmmax
ค่าของมันคือ 18446744073692774399
! ฉันไม่รู้ว่าทำไม แต่มันดูเหมือนบ้า
อย่างไรก็ตาม เหตุใดค่านี้จึงสูงมาก และควรเป็นอย่างไร
การใช้หน่วยความจำในหยดของเรา (รวม 16 GB) เคยอยู่ที่ประมาณ 87% หลังจากแก้ไขคำค้นหาของฉันเมื่อเซิร์ฟเวอร์รีสตาร์ท มันยังคงต่ำกว่าที่ประมาณ 47% และเมื่อเวลาผ่านไปก็กลับมาที่ประมาณ 84% หลังจากไม่กี่ชั่วโมง ไม่มีการดูแลระบบ แต่ฉันคิดว่ามูลค่าสูงของ sshmax อาจเกี่ยวข้องหรือไม่
การตั้งค่า postgres ที่เกี่ยวข้องอื่นๆ ได้แก่:
shared_buffers = 4GB
max_connections = 300
max_wal_size = 2GB
Checkpoint_timeout = 15 นาที
Checkpoint_timeout = 15 นาที
Checkpoint_completion_target = 0.9
คำถามของฉันเกี่ยวกับค่า shmmax ที่สูงและอาจเกี่ยวข้องกับการตั้งค่า postgres ที่ผิดพลาดได้อย่างไร และเหตุใดการใช้หน่วยความจำจึงเพิ่มขึ้นเช่นนั้น