查看Solaris上内存使用情况的综合方法

use*_*626 22 sysadmin operating-system solaris

在Linux上,"top"命令显示内存使用情况的详细但高级别概述,显示:

总内存,已用内存,可用内存,缓冲区使用情况,缓存使用情况,交换大小和交换使用情况.

我的问题是,有哪些命令可以清晰简单地显示这些内存使用数据?如果它们存在于Solaris的"核心"安装中,则会获得奖励积分.'sar'不算:)

Mar*_*ter 19

以下是基础知识.我不确定其中任何一个都算是"清晰简单".

ps(1)

对于流程级视图:

$ ps -opid,vsz,rss,osz,args
  PID  VSZ  RSS   SZ COMMAND
 1831 1776 1008  222 ps -opid,vsz,rss,osz,args
 1782 3464 2504  433 -bash
$
Run Code Online (Sandbox Code Playgroud)

vsz/VSZ:总虚拟进程大小(kb)

rss/RSS:常驻集大小(kb,可能不准确(!),见man)

osz/SZ:内存总大小(页数)

要从页面计算字节大小:

$ sz_pages=$(ps -o osz -p $pid | grep -v SZ )
$ sz_bytes=$(( $sz_pages * $(pagesize) ))
$ sz_mbytes=$(( $sz_bytes / ( 1024 * 1024 ) ))
$ echo "$pid OSZ=$sz_mbytes MB"
Run Code Online (Sandbox Code Playgroud)

vmstat(1M)

$ vmstat 5 5 
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr rm s3 -- --   in   sy   cs us sy id
 0 0 0 535832 219880  1   2  0  0  0  0  0 -0  0  0  0  402   19   97  0  1 99
 0 0 0 514376 203648  1   4  0  0  0  0  0  0  0  0  0  402   19   96  0  1 99
^C
Run Code Online (Sandbox Code Playgroud)

prstat(1M)

   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP       
  1852 martin   4840K 3600K cpu0    59    0   0:00:00 0.3% prstat/1
  1780 martin   9384K 2920K sleep   59    0   0:00:00 0.0% sshd/1
  ...
Run Code Online (Sandbox Code Playgroud)

swap(1)

"长期上市"和"汇总"模式:

$ swap -l
swapfile             dev  swaplo blocks   free
/dev/zvol/dsk/rpool/swap 256,1      16 1048560 1048560
$ swap -s 
total: 42352k bytes allocated + 20192k reserved = 62544k used, 607672k available
$
Run Code Online (Sandbox Code Playgroud)

top(1)

Sun的Solaris配套光盘上提供了旧版本(3.51),其免责声明是"支持社区(不支持Sun)".更新的二进制包可从sunfreeware.com或blastwave.org获得.

load averages:  0.02,  0.00,  0.00;                      up 2+12:31:38                                                                                            08:53:58
31 processes: 30 sleeping, 1 on cpu
CPU states: 98.0% idle,  0.0% user,  2.0% kernel,  0.0% iowait,  0.0% swap
Memory: 1024M phys mem, 197M free mem, 512M total swap, 512M free swap

   PID USERNAME LWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
  1898 martin     1  54    0 3336K 1808K cpu      0:00  0.96% top
     7 root      11  59    0   10M 7912K sleep    0:09  0.02% svc.startd
Run Code Online (Sandbox Code Playgroud)

sar(1M)

那有什么问题sar?:)


mat*_*tli 17

# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                       7308                57   23%
Anon                         9055                70   29%
Exec and libs                1968                15    6%
Page cache                   2224                17    7%
Free (cachelist)             6470                50   20%
Free (freelist)              4641                36   15%

Total                       31666               247
Physical                    31256               244
Run Code Online (Sandbox Code Playgroud)

  • 你必须是root才能运行它 (4认同)

Jam*_*son 2

“top”通常在 Solaris 上可用。

如果没有,则恢复到大多数 UNIX 系统上可用的“vmstat”。

它应该看起来像这样(来自 AIX 机器)

虚拟机状态

系统配置:lcpu=4 mem=12288MB ent=2.00

kthr 内存页错误 cpu
----- ---------- ------------------------ ---------- -----------------------
 rb avm fre re pi po fr sr cy in sy cs us sy id wa pc ec
 2 1 1614644 585722 0 0 1 22 104 0 808 29047 2767 12 8 77 3 0.45 22.3

“avm”和“fre”列告诉您总内存和可用内存。

“man vmstat”应该可以让你了解血淋淋的细节。