利用strace和pmap分析进程中做的内存分配的线程

本文介绍如何利用strace跟踪系统调用,尤其是mmap, munmap, brk,结合pmap分析进程内存分配,特别是针对nscd进程的内存状态定时采样,通过对比smaps数据观察内存变化,分析[heap]和[anon]的增长原因,为优化内存使用提供依据。" 104947108,5843617,WebSocket与MongoDB构建聊天系统入门,"['WebSocket开发', 'MongoDB数据库', 'Java编程', '聊天应用', 'DAO设计']
摘要由CSDN通过智能技术生成

利用strace和pmap分析进程中做的内存分配的线程

1) 增加crontab规则,定时采集进程内存状态数据, 此处以nscd进程为例。

在crontab中%前要加\转义, 此处是每分钟采样一次,实际如果内存变化缓慢,可以改成每小时或其它间隔时间。

crontab -u root -e

*/1 * * * * pid=$(pidof nscd); cat /proc/${pid}/smaps >/root/temp/test_strace/smaps/smaps_${pid}_$(date +\%Y\%m\%d\%H\%M);

可以用各种工具查看和对比保存后的数据:

1.1) 查看一共有多少内存地址区间

cd /root/temp/test_strace/smaps/
grep -E "^[0-9a-f]" smaps_1085_202004091306 | wc -l

1.2) diff 对比不同时间的smaps采样,观察内存的变化

2) strace 跟踪运行中的进程的系统调用,特别关注mmap,munmap,brk等与内存分配有关的系统调用。
2.1) strace -tt -T -f -p $(pidof nscd)
可以看到每个子线程中的系统调用
linux-d4xo-2:~/temp/test_strace/strace # strace -tt -T -f -p $(pidof nscd)
Process 1085 attached with 11 threads
[pid  1096] 13:48:03.024655 futex(0x55697dd13824, FUTEX_WAIT_PRIVATE, 42469, NULL) = -1 EAGAIN (Resource temporarily unavailable) <0.000030>
[pid  1096
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值