记录一个现场问题:Linux服务器中的服务进程莫名被杀死,或者启动失败
情况说明:现场是一台Linux的suse系统服务器,前一天客户反应服务有异常,登录查看发现所有的服务进程都没有启动,以为是客户重启服务器了,服务没启动,就重启了服务(4、5个服务),客户反应已经能够正常使用,就结束了。可是第二天一早现场又反应有问题,上去查看发现服务进程又没了,遂开始排查,下面主要记录自己当时的排查过程
1、我首先想到的是看服务器是不是有被重启过,但是发现服务器是没有被重启的近期。以下是几种常见的查看 Linux 服务器重启记录的方法:
-
查看系统日志文件:
cat /var/log/syslog | grep "System Reboot"
这将显示包含 “System Reboot” 字符串的所有行,这些行通常指示系统重新启动的时间和原因。 -
查看上次启动时间:
last reboot
这个命令会显示系统上次启动的时间,以及从上次启动到当前的运行时间。 -
检查 /var/log/boot.log 文件:
cat /var/log/boot.log
这个文件记录了系统启动过程中的详细信息,包括启动时的各种服务和进程状态。 -
检查 /var/log/dmesg 文件:
dmesg | grep "systemd"
这个命令会显示系统启动时的内核日志信息,包括关于系统启动过程的各种消息。
2、因为有4、5个服务要启动,前面1个启动成功后,再去启动后面的服务时发现启动失败,而且第一个启动的服务进程也被终止了,我先想到了是不是cpu或者磁盘空间不足,使用top
或者free -h
我查看了cpu的占用率和磁盘使用情况,发现都没有什么问题
3、在Linux中要确定进程消失的确切原因,可以查看系统日志文件,例如 /var/log/syslog、/var/log/messages 或应用程序特定的日志文件,这些文件都会记录有关进程终止的信息和原因,我打开/var/log/messages文件发现里面有一行提示Not enough disk space for coredump of xxPid
4、经查询上面这个错误的原因表示磁盘空间不足,无法生成指定进程的 core dump 文件。而core dump 文件是在进程崩溃或异常终止时生成的,用于调试崩溃的原因,然而,如果磁盘空间不足,系统就无法生成这个文件。主要通过以下几种方式解决:
-
释放磁盘空间:首先,需要释放足够的磁盘空间,以便系统能够生成 core dump 文件。可以删除不必要的文件或移动文件到其他磁盘来释放空间。
-
调整 core dump 大小:可以通过修改系统的 core dump 配置来调整 core dump 文件的大小。可以通过
ulimit -c
命令来查看和修改 core dump 文件的大小限制。 -
禁用 core dump:如果不需要 core dump 文件,可以考虑禁用 core dump。这样,当进程崩溃时,系统将不会尝试生成 core dump 文件,从而避免磁盘空间不足的问题。
-
分析其他磁盘空间使用情况:除了释放磁盘空间外,还可以分析其他磁盘空间使用情况,以了解哪些文件或目录占用了大量空间,并采取相应的措施来释放空间。
-
优化磁盘空间管理:考虑对磁盘空间进行优化管理,定期清理不必要的文件、压缩文件、限制日志文件大小等,以确保磁盘空间充足。
5、使用ulimit -c
查看 core dump的配置,输出unlimited
tips:如果输出值为 0,表示 core dump 文件生成已禁用。如果输出值为 -1,表示 core dump 文件大小没有限制。unlimited表示也没有限制。
core dump 文件大小限制为无限制,这意味着如果程序崩溃,将会生成无限制大小的 core dump 文件。这可能会导致磁盘空间被耗尽,因此在生产环境中需要谨慎使用。这也是我这边的原因
6、知道了原因就要进行修改,要么禁用core dump,但是这样不利于后续异常的排查,所以我选择设置固定大小的core dump来解决这个问题。
- 要设置特定大小的 core dump 文件,请使用
ulimit -c
命令,后面跟上希望设置的大小(以 KB 为单位)。例如,要将 core dump 文件大小限制设置为 100 MB,可以执行以下命令:
ulimit -c 100000
这将限制 core dump 文件的大小为 100 MB。但是请注意,这只会影响当前会话中的 core dump 文件大小限制。 若要使更改永久生效,可能需要修改系统范围的配置文件(如 /etc/security/limits.conf)在文件末尾添加一行,指定希望设置的 core dump 大小限制,语法:
* hard core [大小]
其中:
- 表示适用于所有用户。
- hard 表示这是硬限制,不能超过。
- core 表示要限制的资源是 core dump 文件大小。
- [大小] 是希望设置的 core dump 大小。可以使用 unlimited 表示无限制,也可以指定以 KB 为单位的大小。
注意:修改配置文件后可能要重启服务器生效,重启后可使用ulimit -c
来查看是否生效
最后,每个人的情况可能不一样,我主要记录我的排查过程,供有需要的小伙伴参考指正。