Centos 7 | 定时运行 gzip 进程导致 CPU 过高,但无法确定系统自动运行 gzip 的原因 排查思路
文章目录
- 1.gzip 进程引起主机 CPU 过高的排查思路
- 2. 如 /etc/logrotate.d/ 中无 gzip 配置,其他排查思路
- 3. gzip 进程无子进程信息及压缩内容显示的问题
- 4. 如何禁用 gzip 相关的自启或定时任务
- 5. logrotate 服务中使用 gzip 的场景
- 6. 查看 logrotate 执行时间及调度配置
- 附:/etc/logrotate.d/ 目录下配置概览
免费个人运维知识库,欢迎您的订阅:literator_ray.flowus.cn
1.gzip 进程引起主机 CPU 过高的排查思路
在 CentOS 7 中,gzip 进程通常由 logrotate
工具定时触发,用于压缩旧日志文件以节省磁盘空间。若发现 gzip 进程占用 CPU 过高,可通过调整 logrotate
的配置优化其运行时间或禁用压缩功能。相关配置文件通常位于 /etc/logrotate.d/
目录。
此外,可通过系统日志进一步查看 gzip 进程的详细信息。例如使用以下命令查看日志:
journalctl -u gzip.service
也可借助 top
命令实时监控进程状态,判断 gzip 是否占用过高 CPU。
2. 如 /etc/logrotate.d/ 中无 gzip 配置,其他排查思路
若 /etc/logrotate.d/
目录中未发现 gzip 相关配置,可能是以下原因导致其定时运行:
-
系统安装的某些应用程序自动调用 gzip 进行文件压缩;
-
通过 crontab 或其他定时任务调度程序启动 gzip。
建议采取以下措施:
-
使用
crontab -l
查看当前用户的定时任务; -
检查
/etc/cron.*/
目录下的系统定时任务配置; -
使用
lsof -c gzip
查看与 gzip 相关的打开文件,进一步定位调用来源。
如仍无法确定原因,可通过 top
或 htop
等工具持续监控系统资源使用情况。
3. gzip 进程无子进程信息及压缩内容显示的问题
若通过 top
或 ps
命令未看到 gzip 的子进程信息或正在压缩的内容,可能是进程处于等待状态(如阻塞状态),此时 gzip 可能并未执行压缩操作,而是在等待某些系统资源。
建议检查以下系统资源情况:
-
磁盘空间是否不足;
-
磁盘 I/O 使用率是否过高;
-
系统负载是否较大。
可借助 iostat
、dstat
等工具辅助诊断,同时查看系统日志中是否有相关错误或警告信息。
4. 如何禁用 gzip 相关的自启或定时任务
若需彻底禁止 gzip 自动运行,可从以下方面入手:
- 停止并禁用 crond 服务:
systemctl stop crond
systemctl disable crond
- 停止并禁用 logrotate 服务:
systemctl stop logrotate
systemctl disable logrotate
- 检查其他自启服务:
使用以下命令查看所有已启用的服务,禁用与 gzip 相关的服务:
systemctl list-unit-files | grep enabled
注意:禁用上述服务后,需手动执行日志压缩和轮转操作。如有定时处理需求,可编写自定义脚本并通过 crontab 调度。
5. logrotate 服务中使用 gzip 的场景
在 CentOS 中,logrotate 通常会在以下情况下调用 gzip:
-
默认配置中,轮转后的日志文件会自动压缩为
.gz
格式; -
配置文件中如设置
compress
选项,将默认使用 gzip 进行压缩; -
如设置
compresscmd
选项为 gzip 的路径,则强制使用 gzip 压缩。
示例配置段:
/var/log/messages {compresscompresscmd /bin/gzip...
}
实际行为可能因系统版本、logrotate 版本及配置差异而有所不同。
6. 查看 logrotate 执行时间及调度配置
logrotate 默认每日执行一次,其调度配置可通过以下方式查看:
-
主配置文件:
/etc/logrotate.conf
-
每日调度脚本:
/etc/cron.daily/logrotate
该脚本内容通常如下:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
如需调整执行频率,可修改 /etc/cron.daily/logrotate
或将其移至其他调度目录(如 cron.weekly
)。
附:/etc/logrotate.d/ 目录下配置概览
服务名称 | 轮转周期 | 日志路径 |
---|---|---|
zabbix-agent | 每月一次 | /var/log/zabbix |
glusterfs | 每周一次 | /var/log/glusterfs/*.log |
/var/log/glusterfs/bricks/*.log | ||
libvirtd | 每周一次 | /var/log/libvirt/libvirtd.log |
libvirtd.qemu | 每周一次 | /var/log/libvirt/qemu/*.log |
syslog | 每周一次 | /var/log/cron, /var/log/maillog, |
/var/log/messages, /var/log/secure | ||
numad | 每天一次 | /var/log/numad.log |
ppp | 每天一次 | /var/log/ppp/connect-errors |
psacct | 每天一次 | /var/account/pacct |
telegraf | 每天一次 | /var/log/telegraf |
实际轮转操作多发生于凌晨 3 点至 4 点之间。
请不要以此视为定论,这只是我的个人经验