首页 经验

代码中遇到进程阻塞,进程僵死,内存泄漏等情况怎么排查。通过ps查询状态,分析dump文件等方式排查。

时间: 2024-10-21 09:45:54

(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)

排查进程阻塞、进程僵死和内存泄漏等问题是系统维护和故障排除的重要技能。以下是一些常见的方法和步骤,帮助你排查这些问题:


1.进程阻塞

使用 ps 命令查询状态

- 使用 ps auxps -ef 命令查看系统中所有进程的状态,关注以下字段:

 - STAT:进程状态代码,如 S 表示睡眠,D 表示不可中断的睡眠等。

 - WCHAN:表示进程在等待的内核函数,帮助定位阻塞原因。


其他工具

- top / htop:可以实时监控系统的进程状态,观察 CPU 和内存的使用情况。

- strace:可以跟踪进程的系统调用,使用 strace -p <pid> 命令可以查看一个被阻塞的进程正在等待什么。

- lsof:查看进程打开的文件,了解资源占用情况。


2.进程僵死

检查僵尸进程

- 僵尸进程是已经终止但仍在进程表中保留状态的进程。可以通过 ps aux | grep "<defunct>" 查找。

- 通常,父进程没有调用 wait() 或相关函数来收集子进程的状态。


寻找父进程

- 使用 pstree 命令查看进程树结构,了解僵尸进程的父进程。

- 如果父进程没有正常退出,可以尝试重启父进程或手动处理。


处理僵尸进程

- 如果父进程需要重启,确保能够安全地终止父进程并收集子进程的状态。


3. 内存泄漏

使用工具分析

- valgrind:使用 valgrind --leak-check=full ./your_program 可以检测内存泄漏,输出详细的泄漏信息。

- gdb:当程序崩溃时,可以使用 gdb 调试器分析核心转储(dump)文件。使用 gdb ./your_program core 启动,然后使用 bt 查看调用栈,分析泄漏情况。


监控内存使用

- 使用 tophtop监控程序的内存使用情况,观察是否有持续增长的趋势。

- 使用 pmap <pid> 命令查看特定进程的内存映射情况,找到可能的内存泄漏。


4. 分析 Core Dump 文件

启用 Core Dump

- 确保操作系统设置为允许生成 core dump 文件,可以通过 ulimit -c unlimited 命令启用。


使用 gdb 查看 Core Dump

- 使用命令 gdb ./your_program core 加载 core 文件,检查崩溃时的堆栈信息:

 - bt:打印调用栈信息,找到程序崩溃的位置。

 - info locals:查看当前栈帧的局部变量,帮助找出问题原因。

 - list:显示源代码,结合调试信息进行排查。


5. 通用步骤

- 日志分析:查看应用程序和系统日志(如 /var/log/syslog/var/log/messages)找出可能的错误信息或异常情况。

- 重现问题:尝试重现问题,在可控环境下更容易分析和调试。

- 性能监控:定期监控系统性能,设置报警机制,以快速发现和处理潜在问题。


通过以上步骤和工具,你可以有效地排查进程阻塞、僵死和内存泄漏等问题。根据不同情况,灵活应用不同的方法和技术,能够大大提高问题解决的效率。


上一个 CPU的执行方式 文章列表 下一个 Linux了解么,查看进程状态ps,查看cpu状态 top。查看占用端口的进程号netstat grep

最新

工具

© 2019-至今 适观科技

沪ICP备17002269号