首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >站点由于PHP侦听队列而无法访问,CPU 100%被触及。

站点由于PHP侦听队列而无法访问,CPU 100%被触及。
EN

Stack Overflow用户
提问于 2017-01-03 07:07:28
回答 2查看 1.3K关注 0票数 9

我一直在绞尽脑汁试图解决这个问题,这个问题每隔几个小时就会出现在我的制作服务器上,在我的制作服务器上托管一个Wordpress博客(流量不错:平均每天有2000个用户实时,5000+在好日子,每分钟的页面浏览量从300到700+不等)。

我用Newrelic来监控性能,我注意到了一件奇怪的事情:

每隔几个小时(随机),PHP池状态如下(昨天获取的实际状态)

代码语言:javascript
复制
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-FPMnginx解决了问题,但在几个小时内再次发生。任何帮助都是非常感谢的。请引导我。

服务器设置:

代码语言:javascript
复制
DigitalOcean 48GB Memory
16 Core Processor
480GB SSD Disk

PHP池设置:

代码语言:javascript
复制
pm = static
pm.max_children = 100
pm.max_requests = 5000

nginx配置:

代码语言:javascript
复制
worker_processes  32;
worker_rlimit_nofile 100000;
events {
    worker_connections  40000;
    use epoll;
    multi_accept on;
}

我还在使用xcachevarnish和Wordpress上的W3TC。(也有云彩)

sysctl.conf:

代码语言:javascript
复制
# 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
EN

回答 2

Stack Overflow用户

发布于 2017-01-18 17:45:37

尝试停止您的NewRelic代理,并等待几个小时,看看这是否解决了问题。如果是,那么尝试将其升级到最新版本。如果升级后返回,请与NewRelic支持部门联系。

检查您的max_execution_time和request_terminate_timeout中的php.ini。

检查Nginx配置中的proxy_connect_timeout、proxy_send_timeout、proxy_read_timeout和send_timeout值。

我建议检查您的TCP/IP设置,看看这些设置是什么作为保持活力和超时设置,那里可能需要减少。我见过一些发行版默认出现了一分钟或更长的时间。

还应验证侦听器的通信量是否有效。查看是否可以将示例输出到文件中,并验证流量是否合法。许多自动化过程在interwebz上寻找Wordpress实例。这些机器人可以引起各种各样的问题,因为他们黑你的网站。

票数 1
EN

Stack Overflow用户

发布于 2017-08-08 06:10:02

您是否在/var/log/nginx/上查看了您的access.log或domain.com.access.log?看到这一点,您将有更多的细节,为什么PHP占用您的CPU。

我认为你的网站对wp-login.php有很大的影响,这消耗了大量的CPU。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41438166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档