Debian服务器Apache2每日两次因SIGTERM崩溃求助
排查与解决Apache每日崩溃问题的分步指南
我来帮你一步步拆解这个Apache每日崩溃的问题,咱们从最核心的SIGTERM信号入手——这是直接导致Apache关闭的关键原因,再逐个排查其他关联症状。
1. 定位SIGTERM信号的来源
Apache反复被SIGTERM终止,首先得搞清楚这个信号的发送方:
- 先从
journalctl里提取更精准的信息,执行这条命令:
重点看有没有journalctl -u apache2 --since "24 hours ago" | grep -i "sigterm\|terminate\|out of memory"Out of memory相关记录(如果是系统OOM Killer杀了Apache),或者systemd因为配置问题触发的终止提示。 - 检查有没有定时任务在搞鬼:
看看系统的cron任务里有没有每天固定时间执行的脚本会终止Apache:
毕竟你说每日崩溃两次,大概率和定时触发的操作有关。crontab -l ls /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/
2. 先封锁可疑IP的请求
access.log里的13.235.52.55是AWS的IP,Python-urllib/2.7的请求可能是高频爬虫或者恶意扫描,先临时封锁这个IP观察效果:
- 用iptables封锁:
如果你用ufw防火墙的话,执行:iptables -A INPUT -s 13.235.52.55 -j DROP
封锁后观察1-2天,要是崩溃停止了,说明这个IP的请求就是诱因(比如高频请求耗尽资源触发了SIGTERM)。ufw deny from 13.235.52.55 to any
3. 修复PDO重复加载的警告
虽然这只是个警告,但重复加载PHP模块可能导致PHP进程不稳定,进而牵连Apache(尤其是用mod_php的情况下):
- 先找到所有加载PDO的配置行:
通常这个配置会在grep -r "extension=pdo" /etc/php//etc/php/{你的PHP版本}/apache2/php.ini或者/etc/php/{版本}/mods-available/pdo.ini里,删掉重复的extension=pdo.so或extension=pdo_mysql.so行,然后重启Apache:systemctl restart apache2
4. 排查资源耗尽问题
如果以上步骤没解决,就得检查Apache的资源占用情况:
- 安装htop实时监控:
观察崩溃前Apache进程的内存、CPU占用,看是不是某个进程疯涨耗尽了资源。apt install htop htop - 调整Apache的MPM配置:
编辑/etc/apache2/mods-available/mpm_prefork.conf(大部分Debian默认用prefork模式),根据服务器内存调整参数——比如1G内存的服务器可以参考:
修改后重启Apache生效。StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 0
5. 开启详细日志定位深层问题
如果现有日志信息不够,开启Apache的debug级日志:
- 编辑
/etc/apache2/apache2.conf,把LogLevel改成debug:
重启Apache后,下次崩溃时LogLevel debugerror.log会记录更详细的细节,帮你找到根本原因。
内容的提问来源于stack exchange,提问作者Flyzzx
相关产品推荐
相关产品推荐

