宝塔面板CPU总是占用100% 导致网站访问缓慢的解决方法
当您在宝塔面板中发现CPU使用率达到100%,这可能是由多种因素引起的。以下是一些常见原因及其对应的解决办法,帮助您快速定位并解决问题。
原因 | 描述 | 解决方案 |
---|---|---|
服务器系统中毒 | 服务器可能被恶意代码感染,如挖矿木马等。这些恶意程序会占用大量CPU资源,导致CPU使用率飙升。 | 使用top 命令查看是否有可疑进程占用CPU。如果发现异常进程,建议立即终止该进程,并进行全面的安全检查。严重情况下,考虑重装操作系统以确保安全。 |
网站访问量过大或程序负载过高 | 当网站流量突然增加或程序存在性能瓶颈时,可能会导致MySQL (mysqld ) 或PHP进程占用过多CPU资源。 | 使用top 命令监控CPU使用情况,找出占用资源最多的进程。优化数据库查询、减少不必要的PHP脚本执行,或者升级硬件(如增加CPU核心数)来提升处理能力。 |
CC攻击或恶意抓取采集 | 如果您的网站正在遭受CC攻击或被恶意抓取工具频繁访问,短时间内大量的无效请求会导致CPU过载。 | 检查网站访问日志,识别是否存在大量来自同一IP地址的无效请求。可以使用防火墙规则屏蔽恶意IP,或者启用CDN服务来分散流量压力。 |
另外,我们也可以创建自动化脚本,去查杀占用异常多的进程。(仅作参考,自行评估):
第一步:创建监控脚本(详细步骤)
1. 登录服务器SSH
使用工具(如Xshell、PuTTY或宝塔终端)登录你的服务器。
2. 创建脚本目录
执行以下命令,创建一个存放脚本的专用目录(如果目录不存在):
mkdir -p /www/scripts # 创建目录
3. 创建脚本文件
进入目录并新建脚本文件 kill_bash.sh
:
cd /www/scripts # 进入目录 touch kill_bash.sh # 创建空文件
4. 编辑脚本内容
使用 nano
或 vim
编辑器打开文件(推荐 nano
,适合新手):(如果操作不熟悉者,也可以直接进宝塔的根目录找到www/scripts这个目录,在宝塔编辑这个文件:kill_bash.sh 填上如下代码,保存)
nano kill_bash.sh
将以下脚本内容直接复制粘贴到编辑器中:
#!/bin/bash # 日志文件路径 LOG_FILE="/www/scripts/kill_bash.log" # 检测异常 -bash 进程(排除正常进程) PIDS=$(ps aux | grep "[-]bash" | awk '{print $2}' | xargs) if [ -n "$PIDS" ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') - Found abnormal -bash processes. PIDs: $PIDS" >> $LOG_FILE kill -9 $PIDS echo "$(date '+%Y-%m-%d %H:%M:%S') - Killed processes." >> $LOG_FILE else echo "$(date '+%Y-%m-%d %H:%M:%S') - No abnormal processes found." >> $LOG_FILE fi
5. 保存并退出编辑器
在
nano
中:按Ctrl + O
保存 → 按Enter
确认 → 按Ctrl + X
退出。在
vim
中:按Esc
→ 输入:wq
→ 按Enter
。
6. 赋予脚本执行权限
运行以下命令,让脚本可以执行:
chmod +x kill_bash.sh
7. 手动测试脚本
运行脚本检查是否能正常工作:
/bin/bash /www/scripts/kill_bash.sh
8. 查看日志验证结果
检查日志文件,确认是否有进程被终止:
tail -f /www/scripts/kill_bash.log
输出示例:
2024-06-20 15:30:00 - Found abnormal -bash processes. PIDs: 12345 67890 2024-06-20 15:30:00 - Killed processes.
关键注意事项
确认进程异常:
如果日志中频繁出现被杀死的进程,需彻底检查服务器是否被入侵(如检查
/tmp
、/dev/shm
等目录)。使用命令
top
或htop
实时观察进程占用情况。安全建议:
修改服务器SSH默认端口,禁用root直接登录。
定期更新系统和宝塔面板:
apt update && apt upgrade -y # Debian/Ubuntuyum update -y # CentOS
备用方案:
如果问题持续出现,可尝试安装监控工具(如
fail2ban
)加强防护:apt install fail2ban -y # Debian/Ubuntuyum install fail2ban -y # CentOS
后续步骤
完成脚本配置后,继续按照之前的说明,在宝塔面板中添加计划任务即可。如果遇到权限问题或脚本未生效,可以检查:
ls -l /www/scripts/kill_bash.sh # 确认文件权限是否为 -rwxr-xr-xcrontab -l # 确认宝塔任务是否已添加到系统cron
进一步优化和预防措施:
定期安全检查:定期扫描服务器,确保没有恶意软件或未授权的访问。安装并配置防火墙,限制不必要的端口开放。
优化应用程序:审查网站代码,优化数据库查询,减少冗余操作。使用缓存机制(如Redis、Memcached)来减轻数据库负担。
监控与报警:设置实时监控系统,当CPU使用率超过设定阈值时自动发送警报。及时响应异常情况,避免问题扩大化。
硬件升级:根据业务需求评估是否需要升级服务器配置,如增加内存、扩展存储空间或提升CPU性能。
通过以上步骤,您可以有效排查并解决宝塔面板中CPU使用率100%的问题,确保服务器稳定运行。同时,采取预防性措施有助于提高系统的整体安全性与性能表现。