Penggunaan memori proses php-cgi terus berkembang

8

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_REQUESTSke nilai rendah sehingga proses php-cgi didaur ulang dengan cepat. Ketika saya gunakan abuntuk 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 -mberikan 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.sizediatur ke 24M. Dulu 32M tetapi mengurangi itu tidak membantu. xcache.var_sizediatur ke 0. Plugin yang tersisa menggunakan konfigurasi stok. Halaman admin xcache menunjukkan bahwa xcache menggunakan kurang dari 1MB.

PHP memory_limitdiatur 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.confyang 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.

John
sumber

Jawaban:

2

Cobalah untuk menurunkan var_size. Jika kami memiliki nilai 64MB, setelah beberapa jam mulai banyak bertukar, dan setelah beberapa jam berikutnya benar-benar turun. Cobalah untuk menjaga pengaturan asli pada 32M, mungkin ini akan banyak membantu Anda - kami memiliki masalah yang sama di situs perjalanan kami Xcache masih banyak perangkat lunak kereta :(

Tixik
sumber
1

Mengatur permintaan maksimum adalah ide yang tepat. Itu adalah cara untuk menjaga RAM sistem Anda dari mengisi ketika ada kebocoran memori.

Satu hal yang saya sarankan Anda coba adalah beralih ke apache + mod_php. Jika itu berhasil tanpa memori yang bocor, maka itu berarti masalah Anda terkait dengan CGI. Jika terus bocor dengan mod_php, maka mungkin ada kebocoran memori dalam kode di suatu tempat.

Anda bilang Anda menggunakan Drupal. Apakah Anda memiliki modul Drupal yang diinstal? Saya ragu bahwa versi stabil Drupal memiliki kebocoran memori pada intinya, sehingga masalah paling mungkin terjadi pada modul dan pengaya dan penyesuaian pihak ketiga lainnya.

Apreche
sumber
Terima kasih atas jawaban anda. Semua modul Drupal sudah terkenal, dan modul devel tidak melaporkan kebocoran memori apa pun di Drupal. Selanjutnya, kebocoran memori terjadi bahkan jika tidak ada hit sama sekali. Sedangkan untuk mencoba Apache, saya akan meninggalkan ini sebagai pilihan terakhir ketika saya kehabisan ide. Terima kasih lagi.
John
Saya mengalami masalah yang sama ... Bagaimana Anda mematikan proses PHP-CGI ketika Anda selesai dengan itu? Saya hanya menggunakan setup yang sama dengan Wordpress, dan hampir membunuh irisan 256mib saya.
Kyle
Gunakan Nginx karena lebih kecil dari kedua server dan tidak memiliki kebocoran memori dari PHP. Wordpress dan situs besar lainnya menggunakannya.
Xeoncross
0

Berkali-kali masalah semacam ini disebabkan oleh beberapa cache kode-op seperti XCache atau ekstensi PHP memcached.

Janne Pikkarainen
sumber
0

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

Mazgalici
sumber