我一直绞尽脑汁试图解决这个问题,这个问题每隔几个小时就会在我的生产服务器上随机出现一个Wordpress博客(流量不错:平均每天有2000个用户,5000多个好用)天,每分钟的综合浏览量从300到700 +不等。
我使用Newrelic来监控性能,我发现了一件奇怪的事情:
每隔几个小时(随机),PHP-FPM池状态如下(昨天采取的真实状态)
pool: www
process manager: static
start time: 02/Jan/2017:05:03:16 -0500
start since: 27290
accepted conn: 1107594
listen queue: 777
max listen queue: 794
listen queue len: 40000
idle processes: 0
active processes: 100
total processes: 100
max active processes: 101
max children reached: 0
slow requests: 0
重新启动PHP-FPM
和nginx
可以解决问题,但会在几个小时内再次发生。任何帮助表示赞赏。请指导我。
服务器设置:
DigitalOcean 48GB Memory
16 Core Processor
480GB SSD Disk
PHP-FPM池设置:
pm = static
pm.max_children = 100
pm.max_requests = 5000
nginx config:
worker_processes 32;
worker_rlimit_nofile 100000;
events {
worker_connections 40000;
use epoll;
multi_accept on;
}
我还在Wordpress上使用xcache
,varnish
和W3TC
。 (也有Cloudflare)
sysctl.conf的:
# Increase size of file handles and inode cache
fs.file-max = 2097152
# Do less swapping
vm.swappiness = 10
vm.dirty_ratio = 60
vm.dirty_background_ratio = 2
### GENERAL NETWORK SECURITY OPTIONS ###
# Number of times SYNACKs for passive TCP connection.
net.ipv4.tcp_synack_retries = 2
# Allowed local port range
net.ipv4.ip_local_port_range = 2000 65535
# Protect Against TCP Time-Wait
net.ipv4.tcp_rfc1337 = 1
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15
# Decrease the time default value for connections to keep alive
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
### TUNING NETWORK PERFORMANCE ###
# Default Socket Receive Buffer
net.core.rmem_default = 31457280
# Maximum Socket Receive Buffer
net.core.rmem_max = 12582912
# Default Socket Send Buffer
net.core.wmem_default = 31457280
# Maximum Socket Send Buffer
net.core.wmem_max = 12582912
# Increase number of incoming connections
net.core.somaxconn = 40000
# Increase number of incoming connections backlog
net.core.netdev_max_backlog = 65536
# Increase the maximum amount of option memory buffers
net.core.optmem_max = 25165824
# Increase the maximum total buffer-space allocatable
# This is measured in units of pages (4096 bytes)
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
# Increase the read-buffer space allocatable
net.ipv4.tcp_rmem= 10240 87380 12582912
net.ipv4.udp_rmem_min = 16384
# Increase the write-buffer-space allocatable
net.ipv4.tcp_wmem= 10240 87380 12582912
net.ipv4.udp_wmem_min = 16384
# Increase the tcp-time-wait buckets pool size to prevent simple DOS attacks
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
答案 0 :(得分:1)
尝试停止NewRelic代理并等待几个小时,看看是否能解决问题。如果是,请尝试将其升级到最新版本。如果它在升级后返回,请联系NewRelic支持。
检查php.ini中的max_execution_time和request_terminate_timeout。
检查Nginx配置中的proxy_connect_timeout,proxy_send_timeout,proxy_read_timeout和send_timeout值。
我建议检查您的TCP / IP设置以查看那些保持活动状态以及可能需要减少的超时设置。我已经看到一些发行版默认会有一分钟或更长时间。
您还应验证来自侦听器的流量是否为有效流量。看看你是否可以将样本放到文件中并验证流量是否合法。许多自动化流程在interwebz上寻找Wordpress实例。这些僵尸程序可能会导致各种问题,因为它们会破坏您的网站。
答案 1 :(得分:0)
您是否在/ var / log / nginx /上检查了access.log或domain.com.access.log?期待您了解PHP-FPM吃CPU的更多细节。
我认为你的网站对wp-login.php非常蛮力,消耗了大量的CPU。