Hello , 我是小恒
近段时日拿到了实习offer,在复习个人介绍,技术面等面试技巧
最近的更新比较慢的事,这篇文章也是挤时间写的
本文说说前天的一次小服务器崩溃的解决始末
服务情况
服务器配置2核2g
,系统linux centos7
服务有八十多个静态网页
,属于前后端分离的前端静态资源部分,部署迁移容易
还有两个node服务
,前后端均有,使用postgresql
问题出现
上午11点左右服务基本全部停止,具体问题不清楚
情况分析
查看一下CPU100%
+内存爆满
,SSH远程
连接卡顿,很不稳定,基本无法使用
使用Xftp连接成功
,如果是正常情况的资源爆满的话,我们也能实现资源转移
。
迁移
由于SSH远程控制的卡顿,我先将静态资源转移到另一服务器上
迁移
:域名批量修改解析+静态资源文件转移+nginx泛域名解析
域名批量修改解析:高级索引导出所需修改解析的xlsx表格,批量修改
使用Xftp传输,这个不多说
nginx配置文件泛域名配置,参照配置
server
listen 80;
server_name ~^(?<subdomain>.+)\.yourdomain\.com$;
root /../$subdomain;
index index.html index.htm index.php;
服务器端排查
通过Xftp删除部分文件,加上重启服务器,终于使用SSH登录成功了
问题来源来自一段脚本
,具体我不清楚脚本内容
检查进程
使用ps加grep管道命令筛选出前20占用CPU使用率的进程
[root@RainYun-Q7c3pCXM ~]# ps auxw|head -1;ps auxw|sort -rn -k4|head -20
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
amavis 3757 72.8 42.0 1006656 790296 ? Rs 23:19 0:10 /usr/sbin/clamd -c /etc/clamd.d/amavisd.conf
amavis 2045 0.2 5.5 377652 104308 ? S 21:28 0:15 /usr/sbin/amavisd (ch6-avail)
amavis 2046 0.1 5.4 376156 103228 ? S 21:28 0:11 /usr/sbin/amavisd (ch6-avail)
amavis 1757 0.0 5.2 367728 98772 ? Ss 21:28 0:02 /usr/sbin/amavisd (master)
root 1924 0.0 3.2 282988 61056 ? S 21:28 0:00 spamd child
root 1921 0.0 3.2 282988 61056 ? S 21:28 0:00 spamd child
root 1319 0.1 3.2 282988 61552 ? Ss 21:28 0:11 /usr/bin/spamd --pidfile /var/run/spamd.pid -d -c -m5 -H
mysql 2033 0.0 1.7 600252 32288 ? Sl 21:28 0:05 /ewomail/mysql/bin/mysqld --basedir=/ewomail/mysql --datadir=/ewomail/mysql/data --plugin-dir=/ewomail/mysql/lib/plugin --user=mysql --log-error=RainYun-Q7c3pCXM.err --pid-file=/ewomail/mysql/data/RainYun-Q7c3pCXM.pid --socket=/tmp/mysql.sock --port=3306
root 541 0.0 1.4 363300 27376 ? Ssl 21:28 0:00 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
www 926 0.0 1.1 65596 22016 ? S 21:28 0:00 nginx: worker process
问题出现了:
ClamAV
(防病毒软件):/usr/sbin/clamd 和 /usr/sbin/amavisd。
这些服务消耗了大量系统资源
kill PID
杀死即可
检查
CPU使用率恢复了
不过服务还是无法访问
猜测脚本开启了防火墙,尝试禁用 iptables
, firewalld
, ufw
防火墙
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo ufw disable
最后恢复正常
总结
理解底层的原理后,解决这些问题也就是一步一步排查的过程
不过每个人都不是全能的,有时候很多问题也无法解决,这时候就是社区和朋友发挥作用了
多排查,多经历,多写文档,就有经验了