Saya memiliki situasi di mana yang berikut ini terjadi:
Kami berada di linode dengan 8-core, 8gb ram, 2,6 ghz - menggunakan nginx + php-fpm - kami mendapatkan grafik penggunaan cpu yang sangat tinggi (yang kami tidak ingin menjadi tetangga VPS yang buruk) ...
Kami memiliki kurang dari 100 pengguna di situs sekaligus - sehingga situasi ini juga sangat memalukan - bahwa penggunaan cpu kami sangat tinggi.
Kami menggunakan kerangka kerja php-wise yang sangat tidak diketahui, mungkin intensif, dipertanyakan mengerikan, bukannya kerangka kerja lain yang terkenal, terdokumentasi dengan baik, seperti wordpress atau drupal di mana ada BANYAK dokumentasi tentang caching (serta plugin) yang menangani caching) php pada platform nginx + php_fpm.
Jadi, kami memiliki sekitar 6 proses php-fpm terbuka yang ketika MENJALANKAN, mengkonsumsi secara individual LARGE (30+, dan sering mendekati 99%) jumlah cpu - dan saya tidak memiliki ide sedikit pun bagaimana menghentikan mereka menggunakan begitu banyak cpu . Saya tidak tahu skrip php mana yang menyebabkan lonjakan ini karena mereka terjadi setiap saat ... biasanya hanya 1 atau 2 yang berjalan - tetapi ketika semua 6 dijalankan, kami memaksimalkan semua 8 CPU.
File pool.d / www.conf saya memiliki pengaturan berikut:
pm = dynamic pm.max_children = 10 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6
Kami melakukan pengaturan ^ ini karena, dengan cara saya menginterpretasikannya, memori kami benar-benar luar biasa (htop menunjukkan 472/7000 + mb digunakan, tidak ada swapping dll) dan kami dapat menangani lebih banyak proses dan memecah jalur yang menunggu untuk mendapatkan diproses - TETAPI sayangnya, karena setiap proses terlalu kuat pada cpu kami saat berjalan - kami akhirnya menggerakkan CPU kami melalui atap - jadi kami tidak dapat menangani proses yang cukup.
Pertanyaannya - apa yang bisa kita lakukan untuk mengurangi proses penggunaan php-fpm cpu sehingga kita dapat meningkatkan pengaturan dalam file pool conf untuk php-fpm - dan juga ya, /var/log/php5-fpm.log berteriak kepada kami untuk meningkatkan anak-anak kami dan menyesuaikan / meningkatkan server min / max / start kami. Tetapi melakukan hal itu membuat rata-rata beban kami menjadi gila seperti yang dinyatakan sebelumnya. Bagaimana kita bisa melakukannya tanpa harus menggunakan cache atau apa saja pilihan kita?
Ide saya? Saya sudah membaca hal-hal tentang menggunakan cpulimit untuk memastikan tidak ada proses yang membutuhkan lebih dari jumlah cpu yang dialokasikan - tetapi apakah hal itu akan memperlambat agar tidak dapat digunakan lagi? Atau dengan melakukan itu kita dapat meningkatkan kemampuan kita untuk menjalankan lebih dari beberapa proses - saya juga berpikir menjalankan dua kumpulan - satu untuk situs web menghadap ke depan kami (apa yang dialami pelanggan) dan satu lagi untuk backend (yang memengaruhi situs menghadap ke depan kami saat waktu -laporan konsumen sedang dijalankan).
Saya telah menghabiskan beberapa hari untuk meneliti, googling, dll pada topik ini - dan itu sulit karena situasi setiap orang sangat unik untuk sistem mereka - masalahnya adalah pada kerangka kerja yang belum pernah terjadi sebelumnya, mungkin ditulis dengan buruk - membuat - membuat sulit untuk menemukan solusinya. Kita juga tidak bisa begitu saja menghapus kerangka kerja ini - saya harus mencari solusi.
PEMBARUAN: Saya telah menerapkan memcache untuk menyimpan sesi php - karena kerangka kerjanya sangat bergantung pada sesi pengguna dan sifat sistem kami adalah bahwa karyawan sering menggunakan beberapa tab sekaligus - masing-masing memeriksa kembali ke sesi untuk mengkonfirmasi kemampuan / data pengguna / dll ... jadi saya berharap untuk melihat peningkatan kinerja dari ini - selamat mengomentari itu jika Anda mau - saya akan melihat bagaimana hasilnya besok ketika kita melewati masa puncak volume yang lebih tinggi.