У меня 512 МБ, и у меня много проблем с оперативной памятью. Думаю, это связано с моей конфигурацией.
root@s1:~# free -m
total used free shared buffers cached
Mem: 1024 1022 1 0 0 0
-/+ buffers/cache: 1022 1
Swap: 0 0 0
root@s1:~# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 23760 1756 ? Ss 15:33 0:00 init
root 1086 0.0 0.0 21304 1016 ? Ss 15:33 0:00 /sbin/udevd --daemon
root 1153 0.0 0.2 49988 2908 ? Ss 15:33 0:00 /usr/sbin/sshd -D
root 1199 0.0 0.1 14924 1104 ? Ss 15:33 0:00 /usr/sbin/xinetd -dontfork -pidfile /var/run/xinetd.pid -stayalive -inetd_com
root 1201 0.0 0.0 19068 1020 ? Ss 15:33 0:00 cron
syslog 1235 0.0 0.0 12704 816 ? Ss 15:33 0:00 /sbin/syslogd -u syslog
root 1276 0.0 0.0 4352 748 ? S 15:33 0:00 /bin/sh /usr/bin/mysqld_safe
mysql 1345 0.0 4.0 512600 42444 ? Sl 15:33 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/li
root 1435 0.0 0.1 76844 1404 ? Ss 15:33 0:00 nginx: master process /usr/sbin/nginx
www-data 1436 0.0 0.1 77164 1928 ? S 15:33 0:00 nginx: worker process
www-data 1437 0.0 0.1 77164 1960 ? S 15:33 0:00 nginx: worker process
www-data 1440 0.0 0.1 77164 1960 ? S 15:33 0:00 nginx: worker process
www-data 1443 0.0 0.1 77164 1940 ? S 15:33 0:00 nginx: worker process
root 1466 0.0 0.5 337844 6232 ? Ss 15:33 0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data 1468 0.0 0.5 337844 5316 ? S 15:33 0:00 php-fpm: pool www
www-data 1471 0.0 0.5 337844 5316 ? S 15:33 0:00 php-fpm: pool www
www-data 1472 0.0 0.5 337844 5316 ? S 15:33 0:00 php-fpm: pool www
www-data 1473 0.0 0.5 337844 5316 ? S 15:33 0:00 php-fpm: pool www
www-data 1474 0.0 0.5 337844 5316 ? S 15:33 0:00 php-fpm: pool www
www-data 1475 0.0 0.5 337844 5316 ? S 15:33 0:00 php-fpm: pool www
www-data 1476 0.0 0.5 337844 5320 ? S 15:33 0:00 php-fpm: pool www
www-data 1477 0.0 0.5 337844 5320 ? S 15:33 0:00 php-fpm: pool www
www-data 1478 0.0 0.5 337844 5320 ? S 15:33 0:00 php-fpm: pool www
www-data 1479 0.0 0.5 337844 5320 ? S 15:33 0:00 php-fpm: pool www
www-data 1483 0.0 0.5 337844 5320 ? S 15:33 0:00 php-fpm: pool www
www-data 1484 0.0 0.5 337844 5320 ? S 15:33 0:00 php-fpm: pool www
www-data 1486 0.0 0.5 337844 5320 ? S 15:33 0:00 php-fpm: pool www
www-data 1488 0.0 0.5 337844 5320 ? S 15:33 0:00 php-fpm: pool www
www-data 1490 0.0 0.5 337844 5320 ? S 15:33 0:00 php-fpm: pool www
root 1592 0.0 0.1 117216 1436 ? Ss 15:33 0:00 /usr/sbin/varnishd -P /var/run/varnishd.pid -a :80 -T localhost:6082 -f /etc/
www-data 1593 0.0 0.2 593584 2672 ? Sl 15:33 0:00 /usr/sbin/varnishd -P /var/run/varnishd.pid -a :80 -T localhost:6082 -f /etc/
root 1690 0.0 0.2 89132 2248 ? Ss 15:33 0:00 sendmail: MTA: accepting connections
root 1751 0.0 0.3 73384 3672 ? Rs 15:35 0:00 sshd: root@pts/1
root 1767 0.0 0.2 20920 2132 pts/1 Ss 15:35 0:00 -bash
root 1833 0.0 0.1 18112 1248 pts/1 R+ 15:51 0:00 ps aux
И моя конфигурация была:
/etc/nginx/nginx.conf
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
multi_accept on;
use epoll;
}
http {
# Let NGINX get the real client IP for its access logs
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
# Basic Settings
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 20;
client_max_body_size 15m;
client_body_timeout 60;
client_header_timeout 60;
client_body_buffer_size 1K;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
send_timeout 60;
reset_timedout_connection on;
types_hash_max_size 2048;
server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Logging Settings
# access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Log Format
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# Gzip Settings
gzip on;
gzip_static on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 512;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/css text/javascript text/xml text/plain text/x-component
application/javascript application/x-javascript application/json
application/xml application/rss+xml font/truetype application/x-font-ttf
font/opentype application/vnd.ms-fontobject image/svg+xml;
# Virtual Host Configs
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
php.ini
short_open_tag = Off
ignore_user_abort = Off
post_max_size = 15M
upload_max_filesize = 15M
default_charset = "UTF-8"
allow_url_fopen = Off
default_socket_timeout = 30
mysql.allow_persistent = Off
[apc]
apc.stat = "0"
apc.max_file_size = "1M"
apc.localcache = "1"
apc.localcache.size = "64"
apc.shm_segments = "1"
apc.ttl = "3600"
apc.user_ttl = "7200"
apc.gc_ttl = "3600"
apc.cache_by_default = "1"
apc.filters = ""
apc.write_lock = "1"
apc.num_files_hint= "512"
apc.user_entries_hint="4096"
apc.shm_size = "64M"
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.include_once_override = "0"
apc.file_update_protection="2"
apc.canonicalize = "1"
apc.report_autofilter="0"
apc.stat_ctime="0"
;This should be used when you are finished with PHP file changes.
;As you must clear the APC cache to recompile already cached files.
;If you are still developing, set this to 1.
apc.stat="0"
/etc/php5/fpm/pool.d/www.conf
user = www-data
group = www-data
listen = /var/run/php-fpm.socket
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 15
pm.min_spare_servers = 5
pm.max_spare_servers = 25
pm.process_idle_timeout = 60s
request_terminate_timeout = 30
security.limit_extensions = .php
php_flag[display_errors] = off
php_admin_value[error_reporting] = 0
php_admin_value[error_log] = /var/log/php5-fpm.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 128M
/ и т.д. / по умолчанию / лак
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-u www-data -g www-data \
-S /etc/varnish/secret \
-p thread_pools=2 \
-p thread_pool_min=25 \
-p thread_pool_max=250 \
-p thread_pool_add_delay=2 \
-p session_linger=50 \
-p sess_workspace=262144 \
-p cli_timeout=40 \
-s malloc,256m"
Даже после изменений, предложенных @etagenklo, у вас есть до десяти серверов, использующих 128 МБ ОЗУ PHP каждый, плюс еще 64 МБ ОЗУ для APC ... это больше, чем 1 ГБ, прямо сейчас, прежде чем вы принимаете во внимание любой другой вид накладные расходы или использование ОЗУ для каждого процесса.
Предположительно вам нужно сократить использование памяти вашим PHP-приложением; ограничение памяти 128 МБ - это предел, а не жесткое распределение, так что вы на самом деле с помощью большое количество за процесс. Такие инструменты, как XHProf или TraceView, могут помочь вам определить, куда идет вся эта оперативная память. В противном случае установка pm.max_children = 4
должен держать вас ниже 512 МБ даже в случае патологии.
Конечно, еще одно решение - просто получить сервер побольше. Сколько часов вы потратили или потратите на отладку? Сколько стоит ваше время? Сколько стоит немного больше памяти?
Ценности в вашем fpm-pool.conf
кажется слишком высоким. Попробуйте что-нибудь подобное:
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 2
использовать php-fpm
pm = ondemand
pm.max_requests = 10000
и создать своего рода своп
https://www.varnish-software.com/static/book/Tuning.html#storage-backends
в наши дни нет проблем получить больший сервер / vps.