Saya memiliki sepasang server hosting satu situs e-commerce Magento dengan lalu lintas moderat (60k tampilan halaman per hari dilaporkan dari analisis google, saya pikir sekitar 80k dilaporkan di server itu sendiri). Server database berjalan dengan lancar dan cepat, selain dari cegukan yang jarang terjadi, tetapi server apache sering kali jatuh.
Saya telah mengatur magento untuk menggunakan caching PHP (APC) yang disarankan, serta menahan file cache sendiri dalam 1,5 manggung tmpfs (tmpfs ini secara teratur menjadi cukup penuh, dan saya memiliki skrip yang berjalan untuk menghapus file cache ketika tmpfs sedang lebih dari 80% penuh). Saya melayani sebagian besar citra dari amazon cloudfront. Saya baru-baru ini mengatur nginx sebagai proxy terbalik ke apache (nginx juga menyajikan file statis). Saya telah mengkonfigurasi apache dengan kemampuan terbaik saya - keepalives dan hostnamelookup tidak aktif, dan prefork dikonfigurasi sebagai berikut:
<IfModule prefork.c>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 512
MaxClients 256
MaxRequestsPerChild 400
</IfModule>
Saya belum mematikan file .htaccess, dan akses logging aktif. Saya tahu ada beberapa modul yang bisa saya matikan. Saya tidak yakin apa efek dari ketiga perubahan itu, jika ada.
Server apache adalah VPS dengan 6 gig RAM. Pada saat penulisan server melaporkan load average: 17.77, 18.27, 49.76
, tetapi ada sekitar 2 pertunjukan RAM gratis. Ketika benar-benar buruk, bebannya menjadi 120+ dan tetap di sana - memulai kembali apache membawa situs kembali dan memuat kembali.
vmstat
adalah (saat server melaporkan beban di atas), saya pikir, menunjukkan nilai CPU idle berfluktuasi antara 0 dan 70 atau lebih. iostat
menunjukkan nilai iowait antara 0 dan 0,2%.
Saya agak macet. Sedikit yang saya tahu mengatakan kepada saya bahwa masalahnya adalah bahwa CPU kelebihan beban sebagai akibat dari kombinasi kode yang sedang dijalankan, dan jumlah pengguna. Tetapi saya tidak cukup berpengalaman untuk memastikan bahwa itulah masalahnya. Jika itu masalahnya, saya pikir solusinya adalah dengan memperbaiki kode atau untuk membagi situs hosting menjadi dua VPS dengan load balancer.
Jadi, saya kira pertanyaan saya adalah:
- Apa lagi yang bisa saya lakukan untuk menemukan masalah atau hambatan di server?
- Apakah ada perubahan nyata yang dapat saya lakukan pada konfigurasi server untuk meningkatkan ini?
- Apakah ide yang baik untuk mengatur sistem otomatis untuk me-restart apache ketika beban melampaui level tertentu?
- Dari penjelasan di atas, seberapa besar kemungkinan situs tersebut telah melampaui server?
Edit:
Saya menemukan sesuatu yang aneh - / var / spool / mail / root besar ... 38 manggung. Kedengarannya ... tidak sehat. Mungkinkah itu masalahnya?