Bagaimana saya bisa menjaga agar Apache tidak jatuh?


8

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.

vmstatadalah (saat server melaporkan beban di atas), saya pikir, menunjukkan nilai CPU idle berfluktuasi antara 0 dan 70 atau lebih. iostatmenunjukkan 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:

  1. Apa lagi yang bisa saya lakukan untuk menemukan masalah atau hambatan di server?
  2. Apakah ada perubahan nyata yang dapat saya lakukan pada konfigurasi server untuk meningkatkan ini?
  3. Apakah ide yang baik untuk mengatur sistem otomatis untuk me-restart apache ketika beban melampaui level tertentu?
  4. 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?


2
Surat 38GB? Cari tahu apa yang sedang terjadi di sana. Dan kemudian perbaiki.
Alister Bulman

2
" Bagaimana saya bisa menjaga apache agar tidak jatuh " - Beri dia kaki kayu dan jauhkan dari papan.
Shaz

Mailfile kemungkinan karena root error cron atau output crontab. Jika Anda memiliki pekerjaan yang cerewet, mereka mengisi file ini.
Kyle Smith

1
Ada 6 GB ram, tetapi apakah itu OS 64bit? Apakah Anda benar-benar dapat menggunakan lebih dari 4GB yang saat ini Anda gunakan? Jika ini adalah kotak misi kritis, maka saya pasti akan menjalankan Linux-HA dan membaginya menjadi dua kotak hanya untuk tujuan failover. Saya akan berpikir atasan Anda tidak akan begitu dicentang jika Anda tidak memengaruhi garis bawah dengan setiap kecelakaan.
Ori

Jawaban:


3

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.


Saya telah melihat Varnish dan itu terlihat seperti solusi yang baik untuk menjatuhkan beban CPU, setidaknya sampai saya dapat pindah ke host dengan pengaturan CPU yang lebih baik. Terima kasih.
Dave Child

3

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.


Pertama terima kasih Bebannya masih cukup tinggi, jadi saya bisa mencoba beberapa hal ini langsung, yang sangat membantu :). Saya meningkatkan MaxRequestsPerChild menjadi 4000 - load langsung melompat dan tetap sangat tinggi. Saya menguranginya menjadi 1000, dan bebannya agak turun, meskipun masih terlalu tinggi. APC diinstal. SHM adalah 256. Override include_once aktif.
Dave Child

jika APC sudah diinstal, apa yang dilaporkan apc.php? - Unduh dari svn.php.net/viewvc/pecl/apc/trunk/apc.php?view=markup
Alister Bulman

Inilah hasilnya (saya lebih suka untuk tidak menautkan langsung ke situs / server): dl.dropbox.com/u/16366/apc.htm
Dave Child

Maaf, tidak menyadari Anda telah mengedit balasan Anda. Ya, ini adalah VPS dual-core (Xeon 2.4GHz). Saya akan berpikir server ini harus dapat menangani beban saat ini, itulah sebabnya saya khawatir saya melewatkan sesuatu dalam konfigurasi atau gagal menemukan kemacetan di suatu tempat.
Dave Child

2

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.


2

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.


Biasanya, sekitar 10-20 proses aktif melayani permintaan pada titik mana pun. Ketika bebannya sangat tinggi, maka banyak lagi. Magento adalah sesuatu yang monster untuk dijalankan, jadi sementara saya berharap sistem lain akan baik-baik saja dengan lalu lintas dan pengaturan ini, saya bisa percaya ini mungkin hanya Magento yang melebihi kotak. Terima kasih untuk rekomendasi buku.
Dave Child

mod_pagespeed banyak membantu Magento. Cobalah.
laebshade

2

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)?


Mereka disimpan dalam tmpfs.
Dave Child

1

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.