Apa konfigurasi sysctl.conf terbaik untuk server streaming konten yang sangat sibuk dan sangat sibuk? Server mengambil konten dari server jarak jauh seperti amazon, s3, dll. Kemudian menggunakan php untuk secara dinamis mengalirkan konten ke pengguna tanpa menyimpannya ke hard drive. php menggunakan CURL untuk mengambil file, kemudian menggunakan flush () untuk mengalirkannya secara bersamaan, jadi tidak banyak hard drive yang berfungsi ... hanya jaringan dan bandwidth.
Servernya adalah quad core xeon, dengan NIC dupleks penuh 1Gbit, RAM 8gb, dan 500GBx2 dalam RAID. Penggunaan memori server dan beban cpu cukup rendah.
Kami menjalankan debian lenny dan lighttpd2 di atasnya (ya saya tahu belum dirilis :-)) dengan php 5.3.6 dan php fastcgi dengan spawn-fcgi mengikat 4 soket unix berbeda dengan masing-masing 20 anak. Permintaan fcgi maksimum adalah 20, dengan modul mod_balancer dalam konfigurasi lighttpd2 untuk menyeimbangkan permintaan fastcgi di antara 4 soket ini dalam konfigurasi SQF (antrian pendek dulu).
Server kami menggunakan banyak bandwidth, mis. Koneksi jaringan sibuk setiap saat. Hanya setelah 100 hingga 200 koneksi paralel, server mulai melambat dan akhirnya menjadi tidak responsif, mulai memberikan kesalahan batas waktu koneksi. Ketika kami memiliki cpanel, kami tidak pernah mendapatkan kesalahan batas waktu, jadi itu bukan masalah skrip. Itu harus menjadi masalah konfigurasi jaringan.
konfigurasi lighttpd2: proses pekerja = 8, permintaan tetap hidup adalah 32, biarkan batas waktu siaga idle adalah 10 detik, dan koneksi maks adalah 8192.
Konten sysctl.conf kami saat ini adalah:
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1
# Increase maximum amount of memory allocated to shm
kernel.shmmax = 1073741824
# This will increase the amount of memory available for socket input/output queues
net.ipv4.tcp_rmem = 4096 25165824 25165824
net.core.rmem_max = 25165824
net.core.rmem_default = 25165824
net.ipv4.tcp_wmem = 4096 65536 25165824
net.core.wmem_max = 25165824
net.core.wmem_default = 65536
net.core.optmem_max = 25165824
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
# you shouldn't be using conntrack on a heavily loaded server anyway, but these are
# suitably high for our uses, insuring that if conntrack gets turned on, the box doesn't die
# net.ipv4.netfilter.ip_conntrack_max = 1048576
# net.nf_conntrack_max = 1048576
# For Large File Hosting Servers
net.core.wmem_max = 1048576
net.ipv4.tcp_wmem = 4096 87380 524288
sumber
sysctls
. Periksa apakah ada proses tersedak, kurang memori, dll.strace
Proses dan lihat mengapa / di mana mereka menggantung.Jawaban:
Penyesuaian kinerja dan pengidentifikasian leher botol seperti ini adalah masalah yang sulit untuk dipecahkan, dan seringkali membutuhkan banyak informasi untuk mendiagnosis. Kunci dari proses ini adalah melalui proses yang digunakannya dan melihat apakah Anda dapat menemukan sumber daya apa yang sedang habis. Ketika Anda mengatakan server tidak responsif untuk php, tetapi html masih berfungsi, itu adalah titik data yang menarik. Apa yang berbeda antara bagaimana mereka dilayani? Mungkin overruns buffer jaringan yang halus, atau mungkin lebih mendasar dari itu. Anda mungkin hanya menghabiskan 20 anak proses batas fcgi anak, dan mereka semua sibuk melayani data, sementara permintaan baru dimasukkan ke dalam antrian mendengarkan (dan akhirnya kehabisan waktu) menunggu proses php fcgi muncul.
Trik sebenarnya ketika mencoba untuk mendapatkan visibilitas pada kotak adalah untuk masuk ke dalam kotak ketika masalah terjadi dan mulai mengumpulkan informasi.
Untuk mengetahui berapa banyak proses php yang berjalan, Anda harus dapat menjalankan sesuatu seperti ini:
Dan jika Anda ingin menghitungnya daripada menghitungnya sendiri, Anda bisa melakukan sesuatu seperti ini:
Kembali ke pertanyaan awal Anda tentang penyempurnaan kinerja, sebelum mengubah syctl.conf Anda mungkin ingin melihat apa yang server Anda memberi tahu Anda ketika masalah terjadi, Anda dapat mengetahuinya dengan melakukan hal berikut:
Dan kemudian lihat file teks Anda - ini banyak data, tetapi sebelum menyetel nilai yang diberikan, lihat apakah output sysctl melaporkan sesuatu tentang apa yang saat ini digunakan untuk merdu itu, dan apa yang mungkin dikonsumsi. Salah satu contoh adalah file terbuka, yang dapat Anda lihat contoh hasilnya di sini:
Itu memberi tahu kami bahwa kami menggunakan 3456 deskriptor file, tetapi batas kami adalah 102295, jadi kami jauh dari batas kami. Jika angka pertama berada dalam kisaran 100000, itu akan memberi tahu Anda bahwa Anda kehabisan deskriptor file dan itulah yang perlu Anda sesuaikan.
sumber