Saya mencoba menyiapkan server web pada VPS. Masalah saya adalah penggunaan memori dari proses php-cgi meningkat dari waktu ke waktu meskipun situs web tidak menerima lalu lintas sama sekali. (saat ini berada di belakang firewall)
VPS memiliki RAM 360MB. Saya menggunakan Debian Lenny 32bit dan paket-paket lighttpd dan php5-cgi. Terlepas dari beberapa perubahan konfigurasi (tercantum di bawah), saya menggunakan pengaturan stok oleh Debian.
Situs web ini didasarkan pada Drupal. Menggunakan modul devel Drupal, saya dapat mengatakan bahwa penggunaan memori skrip PHP rata-rata kurang dari 20KB, dan tidak pernah melebihi 8MB.
Berikut adalah bagian yang relevan dari output ps aux
:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 29871 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29873 0.0 7.4 65808 27468 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29874 0.0 3.7 55808 13736 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29875 0.0 4.3 58040 16204 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29876 0.0 4.4 57444 16288 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29877 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29879 0.0 9.6 67140 35684 ? S Aug12 0:26 /usr/bin/php-cgi
www-data 29880 0.0 6.6 59172 24492 ? S Aug12 0:23 /usr/bin/php-cgi
www-data 29881 0.0 7.1 59784 26388 ? S Aug12 0:22 /usr/bin/php-cgi
www-data 29882 0.0 7.4 60880 27440 ? S Aug12 0:23 /usr/bin/php-cgi
- Apakah normal memiliki php-cgi sebesar ini?
- Apakah mungkin untuk memperkirakan penggunaan memori php-cgi berdasarkan pengaturan?
- Adakah tips untuk mengurangi konsumsi memori pada proses php-cgi?
Mencari bug kebocoran memori yang diketahui tidak menghasilkan apa pun yang relevan. Dan saya akan terkejut jika paket / konfigurasi default Debian mengalami kebocoran memori yang jelas. Pengguna lain di host yang sama tidak memiliki masalah ini.
Apa yang saya lakukan sejauh ini diatur PHP_FCGI_MAX_REQUESTS
ke nilai rendah sehingga proses php-cgi didaur ulang dengan cepat. Ketika saya gunakan ab
untuk mensimulasikan beban tinggi, ini bekerja dengan sangat baik. Proses mati dengan cepat sebelum mereka tumbuh lebih tinggi dari 10MB. Namun, di bawah beban rendah hingga sedang, semua proses tumbuh dengan mantap (karena penyeimbangan beban) dan kebanyakan dari mereka mengkonsumsi 28MB + secara bersamaan, membuat VPS saya berisiko tertukar. Harap dicatat daripada bahkan tanpa lalu lintas apa pun, prosesnya terus berkembang.
Saya dapat mengurangi jumlah proses php-cgi, tetapi ini terasa seperti solusi lebih dari perbaikan. Saya akan terkejut jika php-cgi biasanya tumbuh seperti ini.
Juga, menjumlahkan total nomor RSS untuk proses php-cgi memberi:
$ ps -C php-cgi -o rss= | awk '{s+=$1}END{print s/1024}'
195.738
Namun, free -m
berikan hasil sebagai berikut:
total used free shared buffers cached
Mem: 360 351 8 0 33 190
-/+ buffers/cache: 127 232
Swap: 255 0 255
- Apakah saya melewatkan sesuatu? Kenapa memori yang digunakan (tanpa buffer) lebih rendah dari total memori penduduk proses php-cgi di host?
Saya memiliki ekstensi PHP berikut:
php5-cgi php5-umum php5-curl php5-gd php5-mysql php5-xcache
xcache.size
diatur ke 24M. Dulu 32M tetapi mengurangi itu tidak membantu. xcache.var_size
diatur ke 0. Plugin yang tersisa menggunakan konfigurasi stok. Halaman admin xcache menunjukkan bahwa xcache menggunakan kurang dari 1MB.
PHP memory_limit
diatur ke 32M.
Ini konfigurasi FastCGI saya:
fastcgi.server = ( ".php" =>
((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 2,
"idle-timeout" => 20,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "1000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
))
)
Saya menggunakan lebih atau kurang stok lighttpd.conf
yang dikirimkan bersama Debian.
Tolong beri tahu saya jika ada data lain yang bisa saya berikan.
Bantuan apa pun dihargai. Saya sudah mencoba memecahkan masalah ini selama berhari-hari. Saya sudah kehabisan ide.
Berkali-kali masalah semacam ini disebabkan oleh beberapa cache kode-op seperti XCache atau ekstensi PHP memcached.
sumber
Hapus pustaka yang tidak digunakan dari /etc/php5/apache2/conf.d. Mungkin Anda tidak perlu pdo.ini dan pdo_mysq.ini atau mysqli.ini Ini akan menghemat beberapa Mega Ram
sumber