Saya memiliki server 64-bit tetapi hanya 256MB RAM. Jadi, saya pindah ke server nginx dengan fast-cgi untuk terhubung ke PHP. Saya menjalankan PHP 5.3.6.
Masalahnya adalah bahwa setelah setiap dua atau tiga hari ketika saya mencoba mengakses halaman PHP apa pun maka saya mendapatkan kesalahan internal server. Satu-satunya cara adalah memulai kembali php-fpm secara manual. Ini berarti saya harus menetapkan beberapa parameter yang salah yang menyebabkannya tersedak. Di bawah ini saya telah mendaftarkan konfigurasi yang relevan.
/etc/php-fpm.conf: -
include=/etc/php-fpm.d/*.conf
log_level = error
;emergency_restart_threshold = 0
;emergency_restart_interval = 0
;process_control_timeout = 0
/etc/php-fpm.d/www.conf: -
[www]
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 500
/etc/nginx/php.conf: -
location ~ \.php {
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_pass unix:---some-location---;
}
Perbarui 1
Dan saya memiliki empat proses nginx yang sedang berjalan. Rata-rata setiap proses php-fpm membutuhkan 35MB RAM (ukuran memori Virtual masing-masing 320MB). Saya juga menjalankan proses MySql.
Perbarui 2
Saya lupa menempelkan log.
log kesalahan php-fpm: -
WARNING: [pool www] seems busy (you may need to increase start_servers, or min/max_spare_servers), spawning 8 children, there are 1 idle, and 7 total children
WARNING: [pool www] server reached max_children setting (10), consider raising it
NOTICE: Terminating ...
php-fpm www.error log: -
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
sumber
free
dan mulai. Saya membagi memori bebas dengan 35 untuk mendapatkanmax_children value
. Saya tidak mendapatkan tujuan dari para terakhir.max_children
ke 3.free
yang Anda perhitungkan? Yang dari baris '- / + buffer / cache' yang digunakan untuk cache disk, tetapi sebenarnya gratis untuk aplikasi?Pengaturan php-fpm Anda tampaknya OK.
Tetapi server yang Anda jalankan agak terbatas sumber dayanya. Jelas dari log bahwa proses PHP melelahkan memori yang tersedia.
Menambah saran yang disediakan oleh cyberx86:
Anda dapat mencoba mengedit parameter memory_limit di file php.ini (lihat di sini ) (walaupun saya tidak yakin itu akan melakukan banyak hal baik)
Mengingat sedikit memori sistem, saya pikir Anda harus mempertimbangkan dengan serius untuk beralih ke OS 32-bit. Menggunakan OS x64 sebenarnya menyakiti Anda daripada menguntungkan.
Jika Anda tidak menggunakan penyimpanan InnoDB dalam database MySql Anda, Anda juga dapat mempertimbangkan mematikan InnoDB di my.cnf Anda - ini akan menghemat 100 MB RAM lainnya.
Lowendbox memiliki tutorial hebat tentang cara mengoptimalkan server untuk konfigurasi memori rendah.
sumber
Perintah yang sangat berguna untuk menemukan memori yang diambil oleh php:
Kemudian Anda membagi RAM yang ingin Anda dedikasikan untuk php, dan Anda memiliki nilai max_children Anda!
Selain itu, Anda dapat memonitor secara manual (Anda harus mengatur status-akhir php) atau dengan Nagios.
sumber
awk: fatal: division by zero attempted
ps --no-headers -o "rss,cmd" | grep php5-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
-C Pilihan tidak bekerja.