Score:0

เซิร์ฟเวอร์ใช้งานหน่วยความจำ MySQL ขัดข้อง

ธง cn

ฉันแค่ต้องการเกริ่นนำด้วยความจริงที่ว่าฉันยังใหม่กับงานผู้ดูแลระบบเซิร์ฟเวอร์แบบนี้ แต่ฉันสนใจและกระตือรือร้นที่จะเรียนรู้มาก ฉันกำลังโฮสต์ไซต์ WordPress ขนาดเล็กบน Digital Ocean ไซต์นี้ค่อนข้างใหม่และมีการเข้าชมเพียงเล็กน้อยหรือไม่มีเลย หยดกำลังเรียกใช้สแต็ก LAMP ทั่วไปและมีหน่วยความจำ 1GB ซึ่งจากประสบการณ์ของฉันที่ผ่านมาก็เพียงพอแล้ว เนื่องจากฉันมักจะไม่ใช้ปลั๊กอินจำนวนมากและใช้ธีมที่ค่อนข้างเบา ปลั๊กอินเดียวที่ฉันติดตั้งที่ไม่เคยใช้มาก่อนคือ WordFence อย่างไรก็ตาม ในระหว่างการพัฒนา บางครั้งฉันได้รับข้อผิดพลาดที่อ่านว่า "ข้อผิดพลาดในการสร้างการเชื่อมต่อกับฐานข้อมูล" บางครั้งไซต์จะไม่โหลดเลย และการเชื่อมต่อผ่าน SSH ก็ช้ามาก วันนี้ฉันประสบปัญหาและหลังจากที่มันแก้ไขได้เอง ฉัน SSH เพื่อดูว่าฉันสามารถหาอะไรได้บ้าง ด้านล่างนี้คือสิ่งที่ฉันสามารถรวบรวมได้:

สูงสุด แสดงรายการ mysql ขึ้นด้านบนอย่างต่อเนื่องเนื่องจากมีการใช้งานสูง

1724 mysql 20 0 1333488 405436 0 วินาที 0.7 40.5 0:11.53 mysqld

grep -Ei 'oom|หน่วยความจำไม่เพียงพอ' /var/log/syslog

25 ม.ค. 15:18:40 น. เคอร์เนลหยด: [599977.961722] oom_kill_process.cold+0xb/0x10
25 มกราคม 15:18:40 เคอร์เนลหยด: [599977.961936] [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name
25 ม.ค. 15:18:40 น. เคอร์เนลหยด: [599977.962031] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/mysql.service,task= mysqld,pid=31337,uid=112
25 ม.ค. 15:18:40 เคอร์เนลหยด: [599977.962130] หน่วยความจำไม่เพียงพอ: กระบวนการที่ถูกฆ่า 31337 (mysqld) total-vm:1342776kB, anon-rss:439804kB, file-rss:0kB, shmem-rss:0kB, UID:112 pgtables:1264kB oom_score_adj:0
25 ม.ค. 15:18:40 น. เคอร์เนลหยด: [599978.039990] oom_reaper: กระบวนการเก็บเกี่ยว 31337 (mysqld), ตอนนี้ anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
25 ม.ค. 15:26:50 น. เคอร์เนลหยด: [600468.028506] systemd เรียกใช้ oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
25 ม.ค. 15:26:50 น. เคอร์เนลหยด: [600468.028534] oom_kill_process.cold+0xb/0x10
25 มกราคม 15:26:50 เคอร์เนลหยด: [600468.028658] [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name
25 ม.ค. 15:26:50 น. เคอร์เนลหยด: [600468.028754] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/mysql.service,task= mysqld,pid=67924,uid=112
25 ม.ค. 15:26:50 น. เคอร์เนลหยด: [600468.028885] หน่วยความจำไม่เพียงพอ: กระบวนการที่ถูกฆ่า 67924 (mysqld) total-vm:1310584kB, anon-rss:385228kB, file-rss:0kB, shmem-rss:0kB, UID:112 pgtables:1132kB oom_score_adj:0
25 ม.ค. 15:26:50 น. เคอร์เนลหยด: [600468.092875] oom_reaper: กระบวนการเก็บเกี่ยว 67924 (mysqld), ตอนนี้ anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

เนื่องจากยังใหม่กับสิ่งนี้ ฉันไม่แน่ใจว่านี่เป็นข้อกังวล (อาจเป็นการโจมตีบางประเภท) หรือเป็นเพียงการกำหนดค่าการติดตั้ง WordPress 1 คลิกของ Digital Ocean หรือหน่วยความจำ 1GB ไม่เพียงพออีกต่อไป ข้อมูลเชิงลึกใด ๆ ที่จะได้รับการชื่นชมอย่างมาก!

ua flag
ส่วนประกอบทั้งหมดรวมอยู่ในหยดเดียวหรือไม่? หรือ MySQL อยู่ในหยดของมันเอง? ค่าของ `innodb_buffer_pool_size` คืออะไร
cn flag
@RickJames ทุกอย่างรวมอยู่ในหยดเดียว - PHP 8.0, MySQL8, Apache2, Ubuntu20.04 และ WordPress การรัน ```mysql> SELECT @@innodb_buffer_pool_size``` ให้ฉัน 134217728
ua flag
ฉันคิดว่าคุณจะต้องได้รับหยดที่ใหญ่กว่า มากเกินไปที่จะบีบลงในหยดเดียว
Score:0
ธง gp
Tim

ฉันไม่ใช่ผู้เชี่ยวชาญใน MySQL แต่ฉันใช้เวลาเล็กน้อยในการลดการใช้หน่วยความจำ MySQL 8.0 บนเซิร์ฟเวอร์ส่วนบุคคลที่ไม่สำคัญที่ฉันใช้งาน และมันก็ทำงานได้ดี คนอื่นอาจโพสต์คำตอบที่ดีกว่า - ไปกับพวกเขามากกว่านี้

ฉันใช้งานเซิร์ฟเวอร์ AWS EC2 t3a.nano ด้วย Wordpress 5 อินสแตนซ์, MySQL 8.x., PHP 7.x และสิ่งอื่นๆ อีกสองสามอย่างด้วย RAM 512MB และ 1GB swap ดังนั้น 1GB จึงเพียงพอสำหรับไซต์ที่มีปริมาณน้อย คุณสามารถเพิ่มพื้นที่สว็อปได้หากต้องการ ระบบปฏิบัติการของคุณจะเพจเอาข้อมูลที่ไม่ต้องการออก เพื่อให้กระบวนการที่กำลังทำงานอยู่มี RAM มากขึ้น

คุณต้องกำหนดค่า MySQL ให้ทำงานด้วยหน่วยความจำจำกัด เช่น การลดขนาด RAM บัฟเฟอร์ และปิดสคีมาประสิทธิภาพการลดการใช้ RAM ของ PHP จะช่วยลดโอกาสที่นักฆ่าหน่วยความจำไม่พอเริ่มทำงาน MySQL 8.0 ยังคงใช้ RAM มากกว่า MySQL 5.6 มาก แม้ว่าผู้เชี่ยวชาญอาจสามารถลดได้มากกว่าที่ฉันมี

นี่คือส่วนสำคัญจากการกำหนดค่า MySQL 8 ของฉัน โปรดทราบว่าฉันไม่ใช่ผู้เชี่ยวชาญเกี่ยวกับ MySQL และคุณควรทำการวิจัยเพื่อทำความเข้าใจการกำหนดค่านี้ก่อนที่จะนำไปใช้ บางส่วนอาจเป็นค่าเริ่มต้น แต่โดยทั่วไปแล้ว ฉันจะตั้งค่าพารามิเตอร์ส่วนใหญ่ใกล้กับค่าต่ำสุดที่อนุญาต

ไฟล์กำหนดค่าของคุณอาจอยู่ในตำแหน่งอื่น ตรวจสอบให้แน่ใจว่าคุณได้สำรองข้อมูลของเซิร์ฟเวอร์ทั้งหมดอย่างเหมาะสมก่อนที่จะเริ่มการเปลี่ยนแปลงใดๆ และสำรองไฟล์ของคุณก่อนที่จะทำการเปลี่ยนแปลง

/etc/mysql/conf.d/mysql.cnf

# การตั้งค่าส่วนกลาง
performance_schema = ปิด

innodb_buffer_pool_size=50M
innodb_flush_method=O_DIRECT
innodb_log_buffer_size=1048576
innodb_log_file_size=4194304
innodb_max_undo_log_size=10485760
innodb_sort_buffer_size=64K
innodb_ft_cache_size=1600000
innodb_max_undo_log_size=10485760
max_connections=20
key_buffer_size=1M

# การตั้งค่าต่อเธรด
thread_stack=140K
thread_cache_size = 2
read_buffer_size=8200
read_rnd_buffer_size=8200
max_heap_table_size=16K
tmp_table_size=128K
temptable_max_ram=2097152
Bulk_insert_buffer_size=0
join_buffer_size=128
net_buffer_length=1K

/etc/mysql/mysql.conf.d/mysqld.cnf

key_buffer_size = 16M
thread_stack = 256K

นี่คือการปรับแต่งบางอย่างที่ฉันทำกับการกำหนดค่า PHP เพื่อลดการใช้ RAM

/etc/php/7.4/fpm/pool.d/www.conf

pm.max_children = 3
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 1
pm.process_idle_timeout = 20 วินาที;
pm.max_requests = 50
php_admin_value[memory_limit] = 64M

สถิติเซิร์ฟเวอร์

นี่คือสถิติบางส่วนจากคำสั่ง 'บนสุด' ของเซิร์ฟเวอร์

โดยรวม

  • Mem 448MB, ฟรี 42MB, ใช้ไปแล้ว 190MB, บัฟเฟอร์ / แคช 216MB
  • สลับ 1024 ฟรี 725MB ใช้ไป 300MB

กระบวนการ

  • MySQL Virt 1459020 ความละเอียด 44696 CPU 3% Mem 10%
  • PHP FPM 7.x Virt 223124 ความละเอียด 32464 CPU 0% เมม 7%
  • Nginx Virt 63932 ความละเอียด 7520 CPU 0% Mem 2%

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา