SSH中执行gcore及远程服务器进程core dump相关技术问询
嘿,我来帮你搞定这两个关于gcore和远程生成core dump的问题:
当然可以!不过你得满足两个关键前提:
- 你要么是目标进程的所有者,要么是以root身份登录远程服务器;
- 远程服务器没有禁用core dump功能:可以先执行
ulimit -c查看,如果输出是0,说明被禁用,临时开启的话可以执行ulimit -c unlimited,要是想永久生效,得修改/etc/security/limits.conf文件添加相关配置。
操作起来很直观:先SSH登录远程机器,比如ssh your_username@remote_host_ip,之后直接运行你的示例命令就行:gcore -o /tmp/core 24635
执行完后,core文件就会出现在远程服务器的/tmp目录下。
必须有办法!这里给你两种实用的方案:
方案一:通过SSH直接远程执行gcore命令
这是最省心的方式,不用额外配置。直接在本地终端里让SSH帮你远程运行gcore:ssh your_username@remote_host_ip "gcore -o /tmp/core 24635"
要是想把生成的core文件拉回本地,接着用scp就行:scp your_username@remote_host_ip:/tmp/core.24635 ./your_local_folder/
注意:同样得满足权限和ulimit的要求,如果远程SSH用了非默认端口(比如2222),记得加上-p参数,比如ssh -p 2222 your_username@remote_host_ip "gcore -o /tmp/core 24635"。
方案二:通过gdb远程调试生成core dump
如果需要更灵活的调试操作,或者不想直接在远程执行命令,可以试试这种方式:
先在远程服务器上启动gdbserver,绑定一个端口并附加到目标进程(需要对应权限):
gdbserver :1234 --attach 24635
这里的1234是自定义端口,记得确保远程服务器的防火墙允许这个端口的TCP连接。在本地终端打开gdb,连接到远程的gdbserver:
gdb -ex "target remote remote_host_ip:1234"连接成功后,在gdb的交互界面里执行生成core文件的命令:
generate-core-file /tmp/remote_core
也可以简写为gcore /tmp/remote_core完成后用scp把远程的core文件拉回本地,之后输入
quit断开gdb连接,远程的gdbserver也会随之停止(目标进程会继续运行,除非你在gdb里做了其他终止操作)。
内容的提问来源于stack exchange,提问作者Sasidharan G

