为了使 gcore 可以工作,你需要确保以下设置到位 。首先,确保为核心文件设置了 ulimit,如果设置为 0,核心文件将不会被生成 。第二,确保 /proc/sys/kernel/core_pattern 有正确的设置来指定核心模式:
$ ulimit -cunlimited$你应该使用 ProcDump 还是 gcore?有几种情况下,你可能更喜欢使用 ProcDump 而不是 gcore,ProcDump 有一些内置的功能,在一些情况下可能很有用 。
等待测试二进制文件的执行
无论是使用 ProcDump 还是 gcore,测试进程必须被执行并处于运行状态,这样才能提供一个 PID 来生成核心文件 。但 ProcDump 有一个功能,就是等待特定的二进制文件运行,一旦发现运行的测试二进制文件与给定的名称相匹配,它就会为该测试二进制文件生成一个核心文件 。它可以使用 -w 参数和程序名称而不是 PID 来启用 。这个功能在测试程序快速退出的情况下很有用 。
下面是它的工作原理 。在这个例子中,没有名为 progxyz 的进程在运行:
$ pgrep progxyz$用 -w 参数调用 procdump,让它保持等待 。在另一个终端,调用测试二进制 progxyz:
$ procdump -w progxyzProcDump v1.1.1 - Sysinternals process dump utilityCopyright (C) 2020 Microsoft Corporation. All rights reserved. Licensed under the MIT license.Mark Russinovich, Mario Hewardt, John Salem, Javid HabibiMonitors a process and writes a dump file when the process exceeds thespecified criteria.Process: progxyz (pending)CPU Threshold: n/aCommit Threshold: n/aPolling interval (ms): 1000Threshold (s): 10Number of Dumps: 1Press Ctrl-C to end monitoring without terminating the process.[03:39:23 - INFO]: Waiting for process 'progxyz' to launch...然后,从另一个终端调用测试二进制 progxyz:
$ ./progxyz &[1] 350951$ProcDump 立即检测到该二进制正在运行,并转储这个二进制的核心文件:
[03:39:23 - INFO]: Waiting for process 'progxyz' to launch...[03:43:22 - INFO]: Found process with PID 350951[03:43:22 - INFO]: Timed:[03:43:23 - INFO]: Core dump 0 generated: progxyz_time_2020-06-24_03:43:22.350951$$ ls -l progxyz_time_2020-06-24_03:43:22.350951-rw-r--r--. 1 root root 356848 Jun 24 03:43 progxyz_time_2020-06-24_03:43:22.350951$$ file progxyz_time_2020-06-24_03:43:22.350951progxyz_time_2020-06-24_03:43:22.350951: ELF 64-bit LSB core file, x86-64, version 1 (SYSV), SVR4-style, from './progxyz', real uid: 0, effective uid: 0, real gid: 0, effective gid: 0, execfn: './progxyz', platform: 'x86_64'$多个核心转储
另一个重要的 ProcDump 功能是,你可以通过使用命令行参数 -n <count> 指定要生成多少个核心文件 。核心转储之间的默认时间间隔是 10 秒,但你可以使用 -s <sec> 参数修改 。这个例子使用 ProcDump 对测试二进制文件进行了三次核心转储:
$ ./progxyz &[1] 351014$$ procdump -n 3 -p 351014ProcDump v1.1.1 - Sysinternals process dump utilityCopyright (C) 2020 Microsoft Corporation. All rights reserved. Licensed under the MIT license.Mark Russinovich, Mario Hewardt, John Salem, Javid HabibiMonitors a process and writes a dump file when the process exceeds thespecified criteria.Process: progxyz (351014)CPU Threshold: n/aCommit Threshold: n/aPolling interval (ms): 1000Threshold (s): 10Number of Dumps: 3Press Ctrl-C to end monitoring without terminating the process.[03:45:20 - INFO]: Timed:[03:45:21 - INFO]: Core dump 0 generated: progxyz_time_2020-06-24_03:45:20.351014[03:45:31 - INFO]: Timed:[03:45:32 - INFO]: Core dump 1 generated: progxyz_time_2020-06-24_03:45:31.351014[03:45:42 - INFO]: Timed:[03:45:44 - INFO]: Core dump 2 generated: progxyz_time_2020-06-24_03:45:42.351014$$ ls -l progxyz_time_2020-06-24_03:45:*-rw-r--r--. 1 root root 356848 Jun 24 03:45 progxyz_time_2020-06-24_03:45:20.351014-rw-r--r--. 1 root root 356848 Jun 24 03:45 progxyz_time_2020-06-24_03:45:31.351014-rw-r--r--. 1 root root 356848 Jun 24 03:45 progxyz_time_2020-06-24_03:45:42.351014$基于 CPU 和内存使用情况的核心转储
ProcDump 还可以让你在测试二进制或进程达到一定的 CPU 或内存阈值时触发核心转储 。ProcDump 的手册页显示了调用 ProcDump 时使用的命令行参数:
- -C:当 CPU 超过或等于指定值时,触发核心转储生成(0 到 100 * nCPU) 。
- -c:当 CPU 小于指定值时,触发核心转储生成(0 到 100 * nCPU) 。
- -M:当内存提交超过或等于指定值(MB)时,触发核心转储生成 。
推荐阅读
- 认知图谱——人工智能的下一个瑰宝
- 想学习人工智能,这个的数据集必须掌握,MNIST入门与实战
- ROS 的常用命令行工具
- 基于WPF的串口调试工具
- 好茶的存仓条件,普洱茶的储存条件
- 那些前端开发需要掌握的:Vuex基础使用方法
- 喝大麦茶的好处,喝大麦茶坏处
- 菊花茶清新淡雅,薄荷塘古树茶的特点
- 荷叶泡茶的作用有哪些,荷叶泡茶的功效与作用有哪些
- 壶承是做什么用的,茶仓是做什么用的
