看看为进程bash分配了多少虚拟内存

时间:2015-03-01 10:56:56

标签: linux bash memory ubuntu-12.04 ulimit

我编写了一个脚本,为我创建的进程分配虚拟或“模拟”内存。我想知道的是,我怎样才能列出这个过程有多少内存?如果我已经分配了一些内存或“进程当前没有分配内存”,如果我没有分配任何内存,我希望它返回“进程有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"
    }

2 个答案:

答案 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来限制进程可以请求的最大空间量,但该进程仍需要在分配空间之前请求空间。