Linux

top的%MEM和VSZ是什麼意思?

  • February 15, 2017

我正在開發一個沒有任何交換分區的嵌入式 Linux 系統(128MB RAM)。下面是它的最高輸出:

Mem: 37824K used, 88564K free, 0K shrd, 0K buff, 23468K cached
CPU:   0% usr   0% sys   0% nic  60% idle   0% io  38% irq   0% sirq
Load average: 0.00 0.09 0.26 1/50 1081
 PID  PPID USER     STAT   VSZ %MEM CPU %CPU COMMAND
1010     1 root     S     2464   2%   0   8% -/sbin/getty -L ttyS0 115200 vt10
1081  1079 root     R     2572   2%   0   1% top
   5     2 root     RW<      0   0%   0   1% [events/0]
1074   994 root     S     7176   6%   0   0% sshd: root@ttyp0
1019     1 root     S    13760  11%   0   0% /SecuriWAN/mi
 886     1 root     S     138m 112%   0   0% /usr/bin/rstpd 51234  <== 112% MEM?!?
1011   994 root     S     7176   6%   0   0% sshd: root@ttyp2
 994     1 root     S     4616   4%   0   0% /usr/sbin/sshd
1067  1030 root     S     4572   4%   0   0% ssh passive
 932     1 root     S     4056   3%   0   0% /sbin/ntpd -g -c /etc/ntp.conf
1021     1 root     S     4032   3%   0   0% /SecuriWAN/HwClockSetter
 944     1 root     S     2680   2%   0   0% dbus-daemon --config-file=/etc/db
1030  1011 root     S     2572   2%   0   0% -sh
1079  1074 root     S     2572   2%   0   0% -sh
   1     0 root     S     2460   2%   0   0% init
 850     1 root     S     2460   2%   0   0% syslogd -m 0 -s 2000 -b 2 -O /var
 860     1 root     S     2460   2%   0   0% klogd -c 6
 963     1 root     S     2184   2%   0   0% /usr/bin/vsftpd /etc/vsftpd.conf
   3     2 root     SW<      0   0%   0   0% [ksoftirqd/0]
 823     2 root     SWN      0   0%   0   0% [jffs2_gcd_mtd6]

ps(除了busybox上的-w之外不理解任何選項)顯示:

 PID USER       VSZ STAT COMMAND
   1 root      2460 S    init
   2 root         0 SW<  [kthreadd]
   3 root         0 SW<  [ksoftirqd/0]
   4 root         0 SW<  [watchdog/0]
   5 root         0 SW<  [events/0]
   6 root         0 SW<  [khelper]
  37 root         0 SW<  [kblockd/0]
  90 root         0 SW   [pdflush]
  91 root         0 SW   [pdflush]
  92 root         0 SW<  [kswapd0]
 137 root         0 SW<  [aio/0]
 146 root         0 SW<  [nfsiod]
 761 root         0 SW<  [mtdblockd]
 819 root         0 SW<  [rpciod/0]
 823 root         0 SWN  [jffs2_gcd_mtd6]
 850 root      2460 S    syslogd -m 0 -s 2000 -b 2 -O /var/log/syslog
 860 root      2460 S    klogd -c 6
 886 root      138m S    /usr/bin/rstpd 51234
 945 root      2680 S    dbus-daemon --config-file=/etc/dbus-system.conf --for
 964 root      2184 S    /usr/bin/vsftpd /etc/vsftpd.conf
 984 root      4616 S    /usr/sbin/sshd
 987 root       952 S    /sbin/udhcpd /ftp/dhcpd.conf
1002 root      4056 S    /sbin/ntpd -g -c /ftp/ntp.conf
1022 root      2464 S    -/sbin/getty -L ttyS0 115200 vt102
1023 root      7176 S    sshd: root@ttyp0
1028 root      2572 S    -sh
1030 root      2572 R    ps

查看程序 886 時,您會看到它使用了 112% 的可用記憶體,並且 VSZ(虛擬記憶體大小)為 138MB。這對我來說沒有任何意義。

頂部手冊頁中它說:

%MEM – 記憶體使用 (RES) 任務目前使用的可用物理記憶體份額。

這個程序怎麼會消耗超過100%的記憶體呢?如果它是如此的記憶體佔用,為什麼系統上還有 88564K RAM 可用?

您引用的手冊頁來自 top 的procps版本。

但是你在一個嵌入式系統上,所以你有 top 的busybox版本。

看起來busybox top 計算%MEMVSZ/MemTotal而不是RSS/ MemTotal

最新版本的busybox 呼叫該列%VSZ以避免一些混淆。 送出日誌

很可能 rstpd 有很多動態庫連結到它,但它們還沒有被載入到記憶體中。

請參閱為什麼頂部的 VSIZE 的值與 ps 中的 VSZ(虛擬集大小)的值不同?

ps aux該過程顯示了什麼?

引用自:https://unix.stackexchange.com/questions/44948