Konfigurasi sysctl.conf terbaik untuk beban tinggi - server streaming konten yang sangat sibuk

9

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
Daniel Johnson
sumber
Oh, saya lupa menyebutkan, ketika saya berkata tidak responsif, saya maen, itu menjadi tidak responsif terhadap halaman .php, halaman statis seperti index.html dan halaman status melayani berfungsi dengan baik ...
Daniel Johnson
2
Anda harus terlebih dahulu menemukan apa yang sebenarnya menyebabkan ketidaktanggapan tersebut . Mungkin tidak ada hubungannya dengan sysctls. Periksa apakah ada proses tersedak, kurang memori, dll. straceProses dan lihat mengapa / di mana mereka menggantung.
coredump
mereka tidak menggantung .. seperti yang saya katakan, hanya file .php menjadi mati. halaman status server berfungsi dengan baik ..
Daniel Johnson
1
@bilal Anda harus memeriksa bagaimana semuanya bekerja bersama. Ini bisa menjadi masalah penguncian, masalah sumber daya bersama (memori / IRQ). Bukan hal sepele untuk menemukan solusi untuk masalah seperti ini.
coredump
2
Bisakah Anda memberikan informasi lebih lanjut di sini? netstat -in, ethtool -S eth0 (atau apa pun antarmuka langsung Anda). Apa yang ditampilkan top ketika server Anda melambat (jalur memori)? Dan - dapatkah Anda memberikan Detail tentang perangkat keras server? Merek / Jenis, jenis kartu jaringan, apakah Anda memiliki kartu jaringan lain yang dapat Anda gunakan?
Nils

Jawaban:

5

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:

ps auxgmww | grep php

Dan jika Anda ingin menghitungnya daripada menghitungnya sendiri, Anda bisa melakukan sesuatu seperti ini:

ps auxgmww | grep php | wc -l

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:

sysctl -a > sysctl.txt

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:

fs.file-nr = 3456   0   102295

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.

Neil Neely
sumber