我编写了一个脚本,为我创建的进程分配虚拟或“模拟”内存。我想知道的是,我怎样才能列出这个过程有多少内存?如果我已经分配了一些内存或“进程当前没有分配内存”,如果我没有分配任何内存,我希望它返回“进程有x mbs”。
我该怎么做?我已经包含了代码片段,因为这里粘贴的时间太长了。
1)
read -p "Enter Memory Value [MB]" p
$script/simulate assignmem oxygen $p
sleep 5
;;
function assign_mem()
{
stop_kill $1
ulimit -m $2
"$script_folder"/"$1">/dev/null&
echo "Process $1 Assigned $2MB Memory"
}
答案 0 :(得分:0)
来自ubuntu proc的手册页 - / proc文件系统
/proc/[number]/maps
A file containing the currently mapped memory regions and their
access permissions.
The format is:
address perms offset dev inode pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
08056000-08058000 rw-p 0000d000 03:0c 64593 /usr/sbin/gpm
08058000-0805b000 rwxp 00000000 00:00 0
40000000-40013000 r-xp 00000000 03:0c 4165 /lib/ld-2.2.4.so
40013000-40015000 rw-p 00012000 03:0c 4165 /lib/ld-2.2.4.so
4001f000-40135000 r-xp 00000000 03:0c 45494 /lib/libc-2.2.4.so
40135000-4013e000 rw-p 00115000 03:0c 45494 /lib/libc-2.2.4.so
4013e000-40142000 rw-p 00000000 00:00 0
bffff000-c0000000 rwxp 00000000 00:00 0
但是 - ulimit不会自动为进程分配虚拟内存。它允许进程执行以获取内存的操作:创建共享内存段,调用多个系统调用之一来分配内存。您的流程必须这样做。
答案 1 :(得分:0)
您可以使用ps
命令找出为进程分配的虚拟内存:
ps -ovsize= 9999
其中9999应替换为进程ID。
产生的价值将是KiB;即,要获得实际的字节数,您需要乘以1024。
=
禁止打印标题行,这会使结果变为简单数字。如果有用,您可以指定多个数据元素;试试,例如,
ps -e -opid,vsize,cmd
ps
还有许多其他有用的功能。 man ps
了解详情。
独立于上述答案,值得注意的是,更改ulimit -m
使不为进程分配内存(也不是虚拟内存空间),而且它是关于驻留内存,而不是虚拟内存。您可以使用ulimit -v
来限制进程可以请求的最大空间量,但该进程仍需要在分配空间之前请求空间。