Mengalami beberapa masalah dengan httpd
( Apache/2.2.29
) penggunaan memori.
Seiring waktu, penggunaan memori dalam httpd
proses meningkat hingga akhirnya mencapai 100%.
Terakhir kali saya memulai kembali httpd
adalah sekitar 24 jam yang lalu. Output dari free -m
adalah:
[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
Untuk membuktikannya httpd
, saya memulai kembali httpd
dan berlari free -m
lagi:
[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
Jadi, memulai ulang Apache membutuhkan memori bebas dari 239 Mb hingga 894 Mb - yang sepertinya merupakan lompatan besar .
Saya telah memeriksa daftar modul Apache yang saat ini diaktifkan (ada cukup banyak) dan dinonaktifkan / dihapus mod_wsgi
dan mod_perl
(keduanya tidak diperlukan untuk server ini, yang menjalankan aplikasi web berbasis PHP - Magento, khususnya).
Berdasarkan pada https://servercheck.in/blog/3-small-tweaks-make-apache-fly , saya telah menjalankan ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
dan mendapatkan output berikut:
[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
Menjalankan alat diagnosis yang disarankan lainnya MaxClients
yang ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
mengembalikan berikut ini:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
Server ini ( m1.small
contoh Amazon AWS ) memiliki 1.7 Gb
RAM. Jadi, oleh karena itu:
Adakah petunjuk / saran lebih lanjut tentang cara terbaik untuk mengubah httpd
pengaturan atau cara mendiagnosis apa yang sebenarnya menyebabkan hal ini?
sumber
-/+ buffers/cache
barisnya; namun dalam hal ini perubahannya sebanding. Bergantung pada bagaimana apache disetel, apache mungkin dimulai hanya dengan beberapa proses yang siap untuk menangani permintaan; setelah periode banyak permintaan bersamaan mungkin akan ada lebih banyak proses bercabang untuk menangani beban. Jumlah proses idle juga dapat disetel. Jadi jika apache tumbuh menggunakan terlalu banyak memori, Anda perlu melakukan beberapa penyetelan.nginx
jadi mungkin sudah saatnya kita mencobanya, tapi jujur, saya telah menggunakan Apache selama bertahun-tahun dan tidak pernah memiliki masalah besar. Magento benar-benar mengunyah memori.grep httpd
(setidaknya untuk saya). Untuk memperbaikinya saya akan merekomendasikan untuk mengecualikan garis itu dari perhitungan seperti ini:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
Jawaban:
Inilah yang telah saya lakukan untuk 'menyelesaikannya':
MaxClients 7
(berdasarkan(1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748
)Karena itu:
Menonaktifkan semua modul Apache kecuali
authz_host_module
,log_config_module
,expires_module
,deflate_module
,setenvif_module
,mime_module
,autoindex_module
,negotiation_module
,dir_module
,alias_module
,rewrite_module
,php5_module
Hapus
mod_ssl
paket karena klien tidak menggunakanhttps://
apa pun.Saya akan melaporkan kembali setelah konfigurasi baru ini berjalan beberapa saat untuk melihat apakah ini menyelesaikannya.
Beberapa inspirasi di sini dipinjam dari: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ dan http://www.activoinc.com/ unduhan / httpd.conf-magento
sumber
httpd
tampaknya hilang sepenuhnya.Saya khawatir opsi MaxRequestsPerChild membantu dalam kasus Anda, karena memungkinkan proses daur ulang setelah jumlah permintaan yang ditentukan, sehingga kebocoran memori ada di sana, tetapi tidak terlihat lagi.
Selain itu: MaxClients = ServerLimit * ThreadsPerChild
Dalam kasus Anda jika Anda hanya membutuhkan 7 pengguna secara bersamaan (MaxClients = 7) itu sudah cukup dengan 2 proses (untuk berjaga-jaga jika ada yang gagal meminimalkan downtime), maka konfigurasi dapat berupa:
Saya menggunakan MaxClients 8 , hanya untuk membuat distribusi permintaan lebih merata antara 2 proses.
sumber