公司有一台阿里云的服务器,今天突然 CPU 飙高,持续了3个小时,也没有降下来。 导致上面的网站打不开,ssh 也无法连接。
无奈选择了重启服务器。多年没有重启过服务器,内心无比慌乱。生怕数据库文件损坏。。。
重启后,发现网站还是打不开 😱。于是确认一下各个服务的状态:
- php fpm 正常
- mysql 正常
- nginx 未启动。。。
80 端口被占用
尝试启动 nginx,发现报错:
$ sudo nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
nginx: [emerg] bind() to [::]:80 failed (98: Unknown error)
确认端口被哪个进程占用
$ sudo lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 1026 root 4u IPv6 21422 0t0 TCP *:http (LISTEN)
AliYunDun 1036 root 10u IPv4 22402 0t0 TCP xxx:48834->:http (ESTABLISHED)
apache2 1040 www-data 4u IPv6 21422 0t0 TCP *:http (LISTEN)
apache2 1041 www-data 4u IPv6 21422 0t0 TCP *:http (LISTEN)
看来是 apache2 占用了 80 端口。导致 nginx 无法启动。
停止 Apache2 服务
$ sudo systemctl stop apache2
并永久禁止 Apache2 启动:
$ sudo systemctl disable apache2
启动 Nginx
$ sudo systemctl start nginx
服务器负载高的原因
看了一下阿里云后台的监控,发现服务器负载高的时间点是中午 12 点左右。
看了一下 Nginx 日志,是一个兄弟,在导出 Excel 文件,把全年的数据导出,并且里面包含了无数张图片。 但是这个 golang 的服务一直在执行,没有停下来 🥲。
导致这个低配的小服务器(2核2G的活动服务器),IO 负载过高。
吓人,我以为中了挖矿病毒。
以后还是加上网站宕机监控比较安全。我看看自己实现一个吧。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式