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?
sumber
Jawaban:
Magento dan Zend Framework cukup CPU-berat, seperti yang Anda perhatikan. Cara terbaik untuk menghindari beban CPU adalah dengan merender konten apa saja hanya satu kali, sampai ia berubah. Sebagian besar katalog Anda tidak sering berubah, dan sering kali hanya blok keranjang belanja di halaman Anda, atau blok 'item paling populer' adalah satu-satunya bagian yang dinamis.
Saya menyarankan untuk meletakkan cache Varnish di depan Apache. Ini memberi Anda caching halaman berkinerja tinggi yang dapat dengan serius menurunkan tumpukan LAMP Anda. Kami baru-baru ini selamat dari peluncuran situs web yang sangat publik berkat Varnish dan saya sangat terkesan dengan kecepatan dan cpu-load yang rendah. Varnish gratis, dan cukup fleksibel untuk me-cache seluruh halaman, atau cache hanya bagian-bagian yang relatif statis dan menyertakan kereta secara dinamis.
Namun, Varnish tidak akan melakukan banyak cache pada instalasi Magento default, karena ada banyak konten dinamis per pengguna, cookie, dll. Modul Magento seperti ' PageCache didukung oleh Varnish ' memodifikasi Magento untuk bekerja dengan baik dengan Varnish. Ini juga menyediakan file konfigurasi Varnish yang cocok dengan pengaturan Magento. Keduanya bersama-sama membuat pengaturan yang sangat efisien. Ini adalah modul komersial, tetapi jauh lebih terjangkau daripada server yang lebih kuat.
Bagian-bagian pembongkaran Anda ke CDN atau Nginx bukanlah masalah Anda yang sebenarnya, meskipun itu membantu. Bahkan Apache dapat menangani sejumlah permintaan statis. Anda perlu men-cache hal-hal yang membutuhkan upaya untuk menghasilkan lagi dan lagi, yaitu bagian dinamis Anda.
sumber
Saya biasanya mengatur MaxRequestsPerChild dalam ribuan - biasanya, lebih dekat 10.000.
Anda mengatakan bahwa Anda memiliki "caching PHP yang disarankan" - tetapi apakah Anda sudah menginstal APC? Akhirnya, berapa banyak pengguna yang Anda lihat memukul situs web pada saat yang sama. Jika Anda memiliki statistik diperpanjang Apache, Anda akan dapat melihat berapa banyak proses Apache sebenarnya dalam status Menjalankan pada suatu waktu.
800 file APC hit per detik, dan 200 pengguna-cache lainnya banyak. Jika itu adalah dual atau quad-core, saya berharap tetap terjaga. Jika database benar-benar mengikuti, maka mendapatkan mesin yang lebih besar - dan lebih banyak CPU, mungkin merupakan hal terbaik untuk itu, setidaknya saat ini.
sumber
Rata-rata beban Anda terlalu tinggi untuk VPS dual core. 8 seharusnya maks.
Saya sudah sukses dengan menggunakan mod_pagespeed dan event MPM untuk Magento. Saya akan merekomendasikan beralih menggunakan MPM acara, dan menginstal mod_pagespeed.
Info lebih lanjut tentang MPM Acara: Dokumentasi MPM acara Apache
Dan mod_pagespeed: Google Code: mod_pagespeed
Jika Anda terus memiliki masalah pemuatan bahkan setelah melakukan perubahan di atas, Anda mungkin ingin mempertimbangkan untuk beralih ke paket VPS yang lebih baik dan lebih baik.
sumber
Sebagai Alister mengisyaratkan, nilai MaxRequestsPerChild dari 400 sangat rendah.
Rata-rata beban sangat tinggi - tetapi 60k tampilan halaman per hari tidak banyak lalu lintas.
berapa banyak proses yang biasanya Anda miliki melayani permintaan?
Saya tidak terbiasa dengan Magento tetapi sepertinya ada yang salah dengan pengaturan ini. Saya berharap Anda bisa mendapatkan lebih banyak throughput pada level beban yang lebih rendah.
Pergi mendapatkan salinan buku Steve Souders dan membacanya. Aktifkan kompresi untuk semua konten HTML keluar (statis dan dinamis). Dan pastikan Anda memiliki konfigurasi caching yang bagus. Mulai masuk% D di file access_log Anda dan buat beberapa alat untuk menganalisis data / mengisolasi kelambatan. Mirip dengan MySQL.
Coba mysqltuner.pl dan lihat apakah masalah tersebut muncul.
sumber
Saya menjalankan setup yang sama, tetapi dengan nginx / php-fpm / apc (opcode dan fast_backend / memcached (slow_backend). Saya menemukan php sebagai masalah sumber daya terbesar, mungkin karena magento entah besar atau hanya kode yang buruk. lihat apa sebenarnya memakan sumber daya, mungkinkah itu php seperti dalam kasus saya?
Selain apa yang Martijn Heemels tulis, ada modul pernis open source yang bisa Anda coba. Lihat http://moprea.ro/2011/may/6/magento-performance-optimization-varnish-cache-3/ dan https://github.com/madalinoprea/magneto-varnish .
Saya hanya mengujinya di lingkungan pengujian, dan sejauh ini sangat bagus.
Apakah Anda menyimpan sesi dalam database, atau pada disk (dan jika demikian, pada tmpfs)?
sumber
Saat Anda menggunakan VPS, Anda membagikan CPU. Saya akan merekomendasikan Anda berbicara dengan host Anda untuk memindahkan VPS Anda ke perangkat keras yang kurang sibuk atau pergi berdedikasi.
Karena CPU yang dibagikan aplikasi Anda tidak dapat berjalan tepat waktu dan terus antri membangun permintaan yang lebih tinggi untuk diproses dan juga overhead yang menyertainya. Akhirnya ada kondisi di mana Apache atau php atau mysql akan melampaui batasnya sendiri dan itu menyebabkan masalah.
Intinya adalah. VPS pada dasarnya adalah CPU bersama. Tuan rumah Anda mungkin menempatkan terlalu banyak akun VPS pada CPU yang sama.
Jika Anda ingin memanfaatkan sepenuhnya CPU yang dialokasikan baik meminta Server yang lebih baik dengan VPS lebih sedikit jika mungkin (pindah host meskipun itu menyusahkan) atau pergi berdedikasi.
Anda juga dapat memilih Amazon sepenuhnya dan tidak perlu khawatir tentang nginx menggunakan load balancer mereka yang merupakan beberapa klik untuk pengaturan semua server Anda di bawah cloud mereka.
folder /var/mail.../root adalah rona artinya mengumpulkan banyak email yang biasanya berasal dari aplikasi Anda. Misalnya, skrip php buggy sedang mencoba mengirim email atau semua pekerjaan cron dikonfigurasi untuk mengirimi Anda status cron menjalankan dan hasilnya. Anda dapat melihat ke dalam surat dan melihat apa yang dimiliki file. Saya menduga pesan kesalahannya sehingga Anda dapat menemukan dari mana datangnya.
Saya akan menambahkan lebih banyak jika Anda memerlukan info lebih lanjut dan mungkin saya perlu beberapa info juga
sumber