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