Redhat查找进程内存使用情况

Redhat查找进程内存使用情况

当我cat /proc/meminfo看到:

MemTotal:      1048576 kB
MemFree:         11136 kB
Buffers:             0 kB
Cached:              0 kB
SwapCached:          0 kB
Active:              0 kB
Inactive:            0 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      1048576 kB
LowFree:         11136 kB
SwapTotal:           0 kB
SwapFree:            0 kB
Dirty:              88 kB
Writeback:           0 kB
AnonPages:           0 kB
Mapped:              0 kB
Slab:                0 kB
PageTables:          0 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:         0 kB
Committed_AS:        0 kB
VmallocTotal:        0 kB
VmallocUsed:         0 kB
VmallocChunk:        0 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB

当我这样做top并按记忆排序时,我看到:

%MEM    TIME+  COMMAND
%22.9   0:44.11 java
% 0.1   0:04.57 init
% 2.9   0:02.52 /usr/local/cpan
% 0.3   0:00.50 sshd
% 1.5   0:00.14 mysqld
% 0.5   0:00.13 leechprotect
% 0.1   0:00.12 bash
% 0.4   0:00.11 httpd
% 0.3   0:00.07 queueprocd - wa
% 0.4   0:00.06 tailwatchd
% 0.8   0:00.02 cpsrvd-ssl
% 0.1   0:00.02 top
% 0.1   0:00.01 syslogd
% 0.4   0:00.01 named
% 0.1   0:00.00 udevd
% 0.0   0:00.00 klogd
% 0.0   0:00.00 courierlogger
% 0.1   0:00.00 authdaemond
% 0.0   0:00.00 authdaemond
% 0.0   0:00.00 authdaemond
% 0.1   0:00.00 sshd
% 0.1   0:00.00 xinetd
% 0.1   0:00.00 mysqld_safe
% 0.0   0:00.00 courierlogger
% 0.1   0:00.00 couriertcpd
% 0.1   0:00.00 exim
% 0.1   0:00.00 pure-ftpd
% 0.1   0:00.00 pure-authd
% 0.1   0:00.00 crond
% 0.0   0:00.00 atd
% 0.2   0:00.00 cPhulkd - proce
% 2.8   0:00.00 spamd child
% 0.8   0:00.00 cpdavd - accept
% 0.4   0:00.00 httpd
% 0.4   0:00.00 httpd
% 0.4   0:00.00 httpd
% 0.4   0:00.00 httpd
% 0.4   0:00.00 httpd
% 0.2   0:00.00 cpanellogd - sl
% 0.1   0:00.00 saslauthd
% 0.0   0:00.00 saslauthd
% 0.1   0:00.00 ssh-agent

为什么顶部显示 ~38% 已使用,而实际上它使用了 1000mb 中的 900mb?我如何知道每个进程使用了​​多少内存?

答案1

刚开始使用 Linux 时,内存使用情况可能会很混乱。一般来说,Linux 的观点是所有的 RAM 都应该被使用,而不是仅仅为进程保留它。

因此,RAM 用于这两个进程,并在从硬盘驱动器加载文件时用作文件的缓存。您可以使用以下free命令更好地看到这一点:

# free output in MBs
$ free -m
             total       used       free     shared    buffers     cached
Mem:          7800       6724       1075          0        397       1952
-/+ buffers/cache:       4374       3425
Swap:         5823         27       5796

这表明我有 ~7.8GB 的​​ RAM,其中 ~6.7GB 正在使用,剩下 ~1GB 空闲,在这一行中:

Mem:          7800       6724       1075          0        397       1952

下一行可以让您了解实际发生的情况:

-/+ buffers/cache:       4374       3425

该行显示第一行报告为“已使用”的 ~6.7GB,如果您将缓冲区和缓存从混合中取出,我们实际上只使用了 ~4.4GB。所以实际上我确实有 ~3.4GB 的可用内存。

缓冲区和缓存是内核从 HDD 加载到 RAM 以提高性能的文件。

摘自linfo.org

第二行数据以 -/+ buffers/cache 开头,显示当前专用于系统缓冲区高速缓存的物理内存量。这对于应用程序来说特别有意义,因为通过使用系统调用执行的从系统上的文件访问的所有数据read()write()经过该缓存。此缓存可以通过减少或消除读取或写入 HDD 或其他磁盘的需要来极大地加快数据访问速度。

相关内容