มีปัญหากับhttpd
( Apache/2.2.29
) การใช้หน่วยความจำ
เมื่อเวลาผ่านไปการใช้หน่วยความจำในhttpd
กระบวนการจะเพิ่มขึ้นจนกว่าจะถึง 100%
ครั้งสุดท้ายที่ฉันเริ่มต้นใหม่httpd
ประมาณ 24 ชั่วโมงที่ผ่านมา ผลลัพธ์จากfree -m
คือ:
[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 1415 239 0 202 424
-/+ buffers/cache: 788 866
Swap: 1023 4 1019
เพื่อพิสูจน์ว่ามันแน่นอนhttpd
ฉันเริ่มต้นใหม่httpd
และวิ่งfree -m
อีกครั้ง:
[ec2-user@www ~]$ sudo service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 760 894 0 202 360
-/+ buffers/cache: 197 1457
Swap: 1023 4 1019
ดังนั้นการรีสตาร์ท Apache จะใช้หน่วยความจำฟรีจาก 239 Mb เป็น 894 Mb ซึ่งดูเหมือนจะเป็นการก้าวกระโดดครั้งใหญ่
ฉันได้ผ่านรายการของโมดูล Apache ที่เปิดใช้งานในปัจจุบัน (มีค่อนข้างมาก) และถูกปิดใช้งาน / ลบออกmod_wsgi
และmod_perl
(ไม่จำเป็นสำหรับเซิร์ฟเวอร์นี้ซึ่งใช้แอปพลิเคชันเว็บที่ใช้ PHP - Magento โดยเฉพาะ)
จากhttps://servercheck.in/blog/3-small-tweaks-make-apache-flyฉันได้ทำงานps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
และรับผลลัพธ์ต่อไปนี้:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
15.1328 MB
118.09 MB
127.449 MB
129.059 MB
117.734 MB
113.824 MB
125.062 MB
123.922 MB
119.855 MB
108.066 MB
136.23 MB
114.031 MB
113.27 MB
110.695 MB
102.113 MB
113.234 MB
186.816 MB
118.602 MB
0.835938 MB
การรันเครื่องมือการวินิจฉัยที่แนะนำอื่น ๆMaxClients
ซึ่งจะps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
คืนค่าต่อไปนี้
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
เซิร์ฟเวอร์นี้ ( m1.small
อินสแตนซ์Amazon AWS ) มี1.7 Gb
RAM ดังนั้น:
คำแนะนำ / ข้อเสนอแนะเพิ่มเติมเกี่ยวกับวิธีปรับแต่งการhttpd
ตั้งค่าหรือวิธีการวินิจฉัยว่าอะไรเป็นสาเหตุของปัญหา
nginx
ดังนั้นอาจถึงเวลาที่เราจะลองทำ แต่โดยสุจริตฉันใช้ Apache มาหลายปีแล้วและไม่เคยมีปัญหาใหญ่เลย วีโอไอพีจะเคี้ยวความจำจริงๆ
grep httpd
-process (อย่างน้อยสำหรับฉัน) เพื่อแก้ไขว่าฉันอยากจะแนะนำให้แยกบรรทัดนั้นออกจากการคำนวณเช่นนี้:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
-/+ buffers/cache
บรรทัดนั้น อย่างไรก็ตามในกรณีนี้การเปลี่ยนแปลงจะเปรียบเทียบกันได้ อาจเริ่มต้นด้วยกระบวนการเพียงไม่กี่กระบวนการที่พร้อมสำหรับจัดการคำขอ หลังจากช่วงเวลาของการร้องขอพร้อมกันจำนวนมากอาจมีกระบวนการมากขึ้นในการจัดการโหลด จำนวนกระบวนการที่ไม่ได้ทำงานสามารถปรับได้ ดังนั้นหากอาปาเช่ใช้หน่วยความจำมากเกินไปคุณต้องทำการปรับแต่ง