Jer*_* C. 11 solaris memory solaris-10 memory-usage
还有一个关于 Solaris 10 内存的问题。
一顶让我发现,我有672 MB可用内存:
130 processes: 126 sleeping, 2 zombie, 2 on cpu
CPU states: 95.1% idle, 3.9% user, 1.0% kernel, 0.0% iowait, 0.0% swap
Memory: 16G phys mem, 672M free mem, 2048M total swap, 2023M free swap
Run Code Online (Sandbox Code Playgroud)
一个vmstat显示我相同:
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr rm s0 s1 s2 in sy cs us sy id
0 0 0 564744 687896 3 13 0 0 0 0 0 0 0 0 0 354 667 752 1 1 98
Run Code Online (Sandbox Code Playgroud)
但是当我做一个prstat -a -s size我得到这个:
NPROC USERNAME SWAP RSS MEMORY TIME CPU
45 orbixadm 1449M 1592M 9.7% 4:46:53 0.4%
48 root 146M 160M 1.0% 8:09:49 1.2%
3 user1 46M 204M 1.2% 0:00:45 0.0%
9 webservd 46M 14M 0.1% 0:00:00 0.0%
5 ctxsrvr 28M 32M 0.2% 4:54:51 0.0%
11 user2 23M 34M 0.2% 0:00:37 0.2%
4 user3 4840K 11M 0.1% 0:00:01 0.0%
1 smmsp 1456K 4552K 0.0% 0:00:24 0.0%
2 daemon 2128K 6224K 0.0% 0:06:32 0.0%
1 user4 1232K 3608K 0.0% 0:00:00 0.0%
1 nagios 376K 2472K 0.0% 0:15:18 0.0%
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,RSS 值的总和没有达到 15GB 的内存,即使我向它添加了 SWAP 值。
所以我的问题是:我相信哪个命令?
如果 top 和 vmstat 给我很好的结果,我的 15GB 已用内存在哪里?如果没有,他们为什么要给我看?
编辑:命令的结果: % echo ::memstat | mdb -k
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 1687138 13180 82%
Anon 137110 1071 7%
Exec and libs 47107 368 2%
Page cache 95277 744 5%
Free (cachelist) 22248 173 1%
Free (freelist) 69592 543 3%
Total 2058472 16081
Physical 2055442 16058
Run Code Online (Sandbox Code Playgroud)
编辑2:
好的,现在我可以看到 ARC 缓存使用的内存了。
但是通过一些新的测试,现在我有:
2066 MB used( prstat -Z和echo ::memstat | mdb -k结果)
1193 MB free(最高结果)
8859 MB ARC cache( kstat zfs::arcstats:size结果)
这给我们或多或少12 GB的内存,而我的系统有16 GB.
也许我错过了别的东西,但其他的4 GB呢?
jll*_*gre 13
ZFS 可能将您的大部分内存用作 ARC 缓存。如果您想知道 RAM 是如何使用的,请以 root 身份运行以下命令:
# echo ::memstat | mdb -k
Run Code Online (Sandbox Code Playgroud)
在 Solaris 10 10/09 和更新版本上,这会显示如下内容:
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 60569 236 16%
ZFS File Data 53270 208 14%
Anon 41305 161 11%
Exec and libs 5891 23 2%
Page cache 1190 4 0%
Free (cachelist) 7006 27 2%
Free (freelist) 212607 830 56%
Total 381838 1491
Run Code Online (Sandbox Code Playgroud)
如您所见,有一行说明使用了多少 RAM 来缓存 ZFS 文件数据。不幸的是,您运行的是较旧的 Solaris 10 发行版,因此 memstat 不会单独显示此 ZFS 统计信息。它包含在内核使用的内存中,这令人困惑。在正常情况下,内核不应使用 13 GB 的 RAM。
无论如何,仍然有一种方法可以在您的服务器上显示完整的 ARC 大小。
只需运行此命令:
# kstat zfs::arcstats:size
module: zfs instance: 0
name: arcstats class: misc
size 273469024
Run Code Online (Sandbox Code Playgroud)
它表明在我的机器上,当前使用 273 MB 的 RAM 来处理 ZFS ARC 缓存。memstat 显示,从这 273 MB 中,有 208 MB 用作文件缓存。如果应用程序需要,最多可以按需自动释放这 208 MB 的 RAM。
现在让我们看看进程内存使用情况。如果您将 -Z 选项与 prstat 一起使用,它会在每个进程的统计信息下显示每个区域的摘要。此处全局(且唯一)区域使用 185 MB 的 RAM。这应该(大致)匹配所有进程 rss 列的总和。
# prstat -Z
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
741 noaccess 129M 113M sleep 59 0 0:00:35 1,4% java/18
973 root 5148K 832K run 29 0 0:00:00 0,4% script/1
972 root 5072K 900K sleep 59 0 0:00:00 0,2% script/1
998 root 7148K 2812K cpu0 49 0 0:00:00 0,1% prstat/1
974 root 3456K 968K sleep 49 0 0:00:00 0,1% ksh/1
5 root 0K 0K sleep 99 -20 0:00:01 0,1% zpool-rpool/37
241 root 5400K 1608K sleep 59 0 0:00:00 0,0% VBoxService/5
77 root 7620K 2356K sleep 59 0 0:00:00 0,0% devfsadm/7
969 root 3372K 936K sleep 59 0 0:00:00 0,0% script/1
126 root 9664K 2844K sleep 59 0 0:00:00 0,0% nscd/31
480 root 9420K 2036K sleep 59 0 0:00:00 0,0% sendmail/1
11 root 9164K 7860K sleep 59 0 0:00:29 0,0% svc.configd/17
1 root 2504K 1432K sleep 59 0 0:00:00 0,0% init/1
413 root 15M 9644K sleep 59 0 0:00:00 0,0% fmd/19
377 root 6536K 2848K sleep 59 0 0:00:02 0,0% inetd/4
ZONEID NPROC SWAP RSS MEMORY TIME CPU ZONE
0 48 177M 185M 12% 0:01:24 2,5% global
Run Code Online (Sandbox Code Playgroud)
这 185 MB 对应于 memstat 输出中两行的总和:“Anon”是应用程序用来存储数据的 RAM,“Exec 和 libs”是应用程序及其库代码。
内存中充满了从磁盘读取的未映射数据页。它保留在内存中,因为这些文件可能会被再次读取,并且将数据保留在内存中可以节省磁盘读取次数。可用内存会永远被浪费,因此计算机会尽力保留尽可能少的内存。
例如,假设您运行一个程序。程序终止。该程序仍在内存中,但由于程序未运行,因此任何进程都不会使用这些内存页。如果系统没有内存压力,页面将保留在内存中。如果程序再次运行,这将节省释放内存的工作量,只需为程序分配更多内存,然后再次读入即可。如果这些页面需要用于其他用途,这对系统来说仍然是一个胜利,因为将内存页面从使用中直接移动到另一个页面比将其释放以再次使用更容易。
内存不是可节省的资源。如果您将 1GB 空闲空间保留一小时,那么您可以使用该数据执行的任何操作都将永远丢失。
| 归档时间: |
|
| 查看次数: |
50406 次 |
| 最近记录: |