我想我可以在我的LAMP应用程序中的内存泄漏(内存被使用了,掉期开始逐渐习惯,等)。 如果我能看到各种进程使用多少内存,它可以帮助我解决我的问题。 有我的方式看到* nix的这些信息?
Answer 1:
获取正确的内存占用率超过一个可以想像的更复杂。 我最好的办法可能找到的是 :
echo 0 $(awk '/TYPE/ {print "+", $2}' /proc/`pidof PROCESS`/smaps) | bc
其中,“进程”是要检查和处理的名称“类型”中的一种:
-
Rss
:常驻内存的使用,该过程使用,包括所有存储这个过程股与其他进程的所有内存。 它不包括交换; -
Shared
:存储器,这个过程股与其它进程; -
Private
:此过程中使用的私有内存,你可以看看这里的内存泄漏; -
Swap
:通过方法中所用交换存储器; -
Pss
:比例设置大小,良好的整体内存指示灯。 据的RSS调整共享:如果处理具有1MiB私人和20MiB其他10个进程之间共享,PSS的是1 + 20/10 = 3MiB
其它有效的值是Size
(即,虚拟大小,这几乎是毫无意义的)和Referenced
(存储器的当前标记为引用或访问的量)。
你可以用watch
或其他一些的bash脚本福来保持对这些价值观的眼睛,你想监控的过程。
有关更多信息smaps
: http://www.kernel.org/doc/Documentation/filesystems/proc.txt 。
Answer 2:
我不知道为什么,答案似乎很复杂......这看起来很简单以做到这一点ps
:
mem()
{
ps -eo rss,pid,euser,args:100 --sort %mem | grep -v grep | grep -i $@ | awk '{printf $1/1024 "MB"; $1=""; print }'
}
实例:
$ mem mysql
0.511719MB 781 root /bin/sh /usr/bin/mysqld_safe
0.511719MB 1124 root logger -t mysqld -p daemon.error
2.53516MB 1123 mysql /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
Answer 3:
使用ps
找到应用程序的进程ID,然后用top -p1010
(替代1010为真正的进程ID)。 所述RES列是使用的物理存储器和VIRT列是使用的虚拟存储器 - 包括库和交换存储器。
更多信息可以使用“顶人”中找到
Answer 4:
首先得到PID:
ps ax | grep [process name]
然后:
top -p PID
你可以看的同时各种过程:
top -p PID1 -p PID2
Answer 5:
您可以使用PMAP报告内存使用情况。
概要:
pmap [ -x | -d ] [ -q ] pids...
Answer 6:
更好的方法:
echo "Memory usage for PID <>:"; for mem in {Private,Rss,Shared,Swap,Pss};do grep $mem /proc/<pid>/smaps | awk -v mem_type="$mem" '{i=i+$2} END {print mem_type,"memory usage:"i}' ;done
Answer 7:
谢谢。 我用它来创建可用于观看一个过程,它的内存使用这个简单的bash脚本:
$手表watchmypid.sh
#!/bin/bash
#
PROCESSNAME=changethistoyourprocessname
MYPID=`pidof $PROCESSNAME`
echo "=======";
echo PID:$MYPID
echo "--------"
Rss=`echo 0 $(cat /proc/$MYPID/smaps | grep Rss | awk '{print $2}' | sed 's#^#+#') | bc;`
Shared=`echo 0 $(cat /proc/$MYPID/smaps | grep Shared | awk '{print $2}' | sed 's#^#+#') | bc;`
Private=`echo 0 $(cat /proc/$MYPID/smaps | grep Private | awk '{print $2}' | sed 's#^#+#') | bc;`
Swap=`echo 0 $(cat /proc/$MYPID/smaps | grep Swap | awk '{print $2}' | sed 's#^#+#') | bc;`
Pss=`echo 0 $(cat /proc/$MYPID/smaps | grep Pss | awk '{print $2}' | sed 's#^#+#') | bc;`
Mem=`echo "$Rss + $Shared + $Private + $Swap + $Pss"|bc -l`
echo "Rss " $Rss
echo "Shared " $Shared
echo "Private " $Private
echo "Swap " $Swap
echo "Pss " $Pss
echo "=================";
echo "Mem " $Mem
echo "=================";
Answer 8:
使用top
或htop
和注意“RES”(常驻内存的大小)列。
Answer 9:
你想要的工具是ps的。 为了得到什么Java程序在做信息:
ps -F -C java
要获得关于HTTP信息:
ps -F -C httpd
如果你有机会来运行这些之前,你的程序已经结束,打开另一个终端,运行:
while true; do ps -F -C myCoolCode ; sleep 0.5s ; done
Answer 10:
您可以使用pmap
+ awk
。
最有可能的,我们感兴趣的RSS
内存是在本例中的最后一行的第三列pmap
低于输出(82564)。
$ pmap -x <pid>
Address Kbytes RSS Dirty Mode Mapping
....
00007f9caf3e7000 4 4 4 r---- ld-2.17.so
00007f9caf3e8000 8 8 8 rw--- ld-2.17.so
00007fffe8931000 132 12 12 rw--- [ stack ]
00007fffe89fe000 8 8 0 r-x-- [ anon ]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------ ------ ------
total kB 688584 82564 9592
然后AWK用于提取该值。
$ pmap -x <pid> | awk '/total/ { print $4 "K" }'
该pmap
值以千字节为单位。 如果我们以MB为单位想要它,我们可以做这样的事情。
$ pmap -x <pid> | awk '/total/ { print $4 / 1024 "M" }'
Answer 11:
如果你不具有目前或长期运行的进程进行跟踪,可以使用/usr/bin/time
。
这是不一样的Bash time
(你会看到)。
例如
# /usr/bin/time -f "%M" echo
2028
这是“在其生命周期过程中的最大驻留集大小(KB)”(从该名男子页引用)。 即,与在RES top
等。
还有很多更你可以从/usr/bin/time
。
# /usr/bin/time -v echo
Command being timed: "echo"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1988
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 77
Voluntary context switches: 1
Involuntary context switches: 0
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
Answer 12:
为什么所有这些复杂的答案,各种shell脚本? 使用HTOP,它会自动更改尺寸,你可以选择要显示该信息,它工作在终端,所以它不需要桌面。 例如:HTOP〜D8
Answer 13:
使用
- PSü'的pidof TASKS_LIST` $或PSü-C $ TASK
- PS徐--sort%MEM
- PS ^ h -o PMEM -C $ TASK
例:
ps-of()
{
ps u `pidof "$@"`
}
$ ps-of firefox
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
const 18464 5.9 9.4 1190224 372496 ? Sl 11:28 0:33 /usr/lib/firefox/firefox
$ alias ps-mem="ps xu --sort %mem | sed -e :a -e '1p;\$q;N;6,\$D;ba'"
$ ps-mem
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
const 3656 0.0 0.4 565728 18648 ? Sl Nov21 0:56 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon
const 11361 0.3 0.5 1054156 20372 ? Sl Nov25 43:50 /usr/bin/python /usr/bin/ubuntuone-control-panel-qt
const 3402 0.0 0.5 1415848 23328 ? Sl Nov21 1:16 nautilus -n
const 3577 2.3 2.0 1534020 79844 ? Sl Nov21 410:02 konsole
const 18464 6.6 12.7 1317832 501580 ? Sl 11:28 1:34 /usr/lib/firefox/firefox
$ ps h -o pmem -C firefox
12.7