linux - 找出哪个进程正在使用共享内存

标签 linux memory ipc

我想知道系统当前正在使用共享内存,所以我运行命令:

ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x50040150 2195456    user-owner  660        65648      2
0x00000000 2228225    user-owner  660        32768      1
0x00000000 2260994    user-owner  660        1052672    1
0x00000000 2293763    user-owner  660        57304      2
0x00000000 2326532    user-owner  660        98256      1
0x00000000 2359301    user-owner  660        53184      1
0x00000000 2392070    user-owner  660        98416      2
0x00000000 2424839    user-owner  660        98416      2
0x00000000 2457608    user-owner  660        672000     2
0x00000000 2490377    user-owner  660        672000     2
0x00000000 2523146    user-owner  660        672000     2
0x00000000 2555915    user-owner  660        672000     2
0x00000000 2588684    user-owner  660        672000     2
0x00000000 2621453    user-owner  660        672000     2
0x00000000 2654222    user-owner  660        672000     2
0x00000000 2686991    user-owner  660        672000     2
0x43040150 2719760    user-owner  660        304        1
0x00000000 2752529    user-owner  660        32768      1
0x00000000 2785298    user-owner  660        266240     1
0x00000000 2818067    user-owner  660        49104      1
0x00000000 2850836    user-owner  660        167920     2
0x00000000 2883605    user-owner  660        102384     2
0x013352ab 720918     user-owner  666        4096       2

--> 总共享内存 7555480 字节 = 7555.48 kB

然后运行 ​​cat/proc/meminfo |grep -i

cat /proc/meminfo |grep -i shmem<br/>
Shmem:             21592 kB 

如我所见,ipcs -m 中的总共享内存之间存在差距,我无法理解哪个进程正在使用 你能帮我解决这个问题吗?

谢谢

最佳答案

shmem 不仅包含 ipc 共享内存段,例如 ramdisk。

/proc/pid/statm - 第三个字段表示一个进程有多少共享内存页。示例代码:

cd /proc
for i in `ls -d * | grep -v self`
do 
  if [[ -f $i/statm ]];then 
     echo -n "$i "; cat $i/statm | perl -lan -e 'print ($F[2] * 4096)'; 
  fi  
done | sort -nr -k2 | head

4096 是来自 getconf PAGESIZE 的页面大小

参见 https://lists.kernelnewbies.org/pipermail/kernelnewbies/2013-July/008628.htmlhttps://access.redhat.com/solutions/406773更多的可能性。

关于linux - 找出哪个进程正在使用共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40712097/

相关文章:

linux - Ubuntu 服务器 14.04 上的 Matlab 2015b 中的 audioread

c - 函数是否占用内存空间?

c++ - 在 RAM 中高效存储 DNA 碱基对数据?

c# - 更改 .net 部署的应用程序的 Properties.settings

php - 如何在 Amazon EC2 Linux AMI 实例上安装 Zend Optimizer?

linux - PE 和 ELF 二进制格式有什么区别?

c - 是否可以使用 C 中的单个消息队列进行双向通信

Linux:查找具有特定名称的所有文件夹,删除它们并将文件夹复制到这些文件夹的父目录中

c# - 是否可以避免序列化/反序列化并与内存映射文件 (MMF) 共享大内存对象?