问题背景
由于近期关闭博客访问密码,由此凌晨访问博客发现无法访问。随即打开电脑,登录服务器查看原因。
问题排查
登录服务器后,top查看资源消耗。发现内存爆了。发现php-fpm很活跃,由于php有内存泄漏问题。顾杀死php-fpm观察,发现关闭php-fpm后内存正常(ps 租用的阿里云虚拟机,1核512M)。打开php-fpm后,刚开始能打开网站,很快又陷入无法访问。考虑到是php-fpm内存占用过多的问题,故研究了下php-fpm。
#关闭php-fpm
service php-fpm stop
#打开php-fpm
service php-fpm start
php-fpm优化
pm = dynamic #如何控制子进程,选项有static和dynamic
pm.max_children = 8#静态方式下开启的php-fpm进程数量
pm.max_requests = 100#php-fpm子进程能处理的最大请求数
pm.start_servers = 4#动态方式下的起始php-fpm进程数量
pm.min_spare_servers = 2 #动态方式下的最小php-fpm进程数
pm.max_spare_servers = 8 #动态方式下的最大php-fpm进程数量
如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。
如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。
系统会在php-fpm运行开始 的时候启动pm.start_servers个php-fpm进程,
然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
对于内存大的服务器(比如8G以上)来说,指定静态的max_children实际上更为妥当,因为这样不需要进行额外的进程数目控制,会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。
数量也可以根据 内存/30M 得到,比如8GB内存可以设置为100,那么php-fpm耗费的内存就能控制在 2G-3G的样子。
我的配置
pm = dynamic
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 8</code></pre>
<pre><code>ps -ef | grep php-fpm | grep -v grep | wc -l #查看进程数
问题解决的后续思考
为什么突然访问量暴增?
打开wordpress统计插件,发现有大量访客来自国内不同地区。当时凌晨4点,我的网站没有任何推广。emmm…我的站点可能被别的服务器扫描了,互联网安全,你懂的。。。
如何通过可视化界面来监控服务器环境
netdata 实时监控与告警
- 以二进制编译形式进行安装
bash <(curl -Ss https://my-netdata.io/kickstart.sh) all</code></pre></li>
</ol>
<p>bash <(curl -Ss <a href="https://my-netdata.io/kickstart-static64.sh">https://my-netdata.io/kickstart-static64.sh</a>) #64位
- 默认端口19999,防火墙设置
service iptables status #查看防火墙状态
service iptables -I INPUT -p tcp --dport 19999 -j ACCEPT #添加流入端口
service iptables save
service iptables restart
service iptables status
环境可以可视化,如何使服务器配置可视化了
webmin
- 创建webmin.repo
#vi /etc/yum.repo.d/webmin.repo
[Webmin]
name=Webmin Distribution Neutral
baseurl=http://download.webmin.com/download/yum
enabled=1
gpgcheck=1
gpgkey=http://www.webmin.com/jcameron-key.asc</code></pre>
- 安装webmin
yum check-update
yum install webmin –y
service webmin start
- 配置防火墙
service iptables -I INPUT -p tcp --dport 10000 -j ACCEPT
service iptables save
service iptables restart
- 配置域名(nginx)
无负载模式
location / {
# 不需要考虑到负载的,就无需配置upstream节点。
proxy_pass https://127.0.0.1:10000;
proxy_redirect off;
#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
}
负载模式
upstream node {
server 127.0.0.1:19999;
}
server {
listen 80;
server_name webmin.wyxxt.org.cn;
location / {
# 配置upstream节点
proxy_pass https://node;
proxy_redirect off;
#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
}
}