我正在调查基于 Debian 的 Amazon EC2 实例的虚拟内存配置,由于我的背景不是系统管理,所以我对所看到的内容感到有点困惑。
我们正在使用 MongoDB,我们的监控服务器表明 Mongo 进程使用了大约 20GB交换空间虚拟内存,但我不知道它在服务器上的位置。
据我使用 Google 建议的各种方法所知,数量要么少得多,要么根本没有。
top
表示有1.8GB的交换内存:
top - 15:35:21 up 6 days, 3:23, 1 user, load average: 1.60, 1.43, 1.37
Tasks: 47 total, 2 running, 45 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 1.3%sy, 0.0%ni, 14.7%id, 83.8%wa, 0.0%hi, 0.0%si, 0.1%st
Mem: 3928924k total, 2855572k used, 1073352k free, 640564k buffers
Swap: 0k total, 0k used, 0k free, 1887788k cached
swapon -s
似乎认为没有任何交换空间:
Filename Type Size Used Priority
free -m
也不认为有任何交换:
total used free shared buffers cached
Mem: 3836 3663 172 0 626 2701
-/+ buffers/cache: 336 3500
Swap: 0 0 0
并且也没有vmstat
:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 3 0 66224 641372 2874744 0 0 21 5012 21 33 2 2 76 19
但cat /etc/fstab
认为有一个交换分区:
/dev/xvda1 / ext3 defaults 1 1
/dev/xvda2 /mnt ext3 defaults 0 0
/dev/xvda3 swap swap defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
但是df -k
没有给出 xvda3 分区的迹象:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda1 16513960 15675324 0 100% /
tmpfs 1964460 8 1964452 1% /lib/init/rw
udev 1914148 28 1914120 1% /dev
tmpfs 1964460 4 1964456 1% /dev/shm
所以我真的不知道该怎么做,因为我似乎有一个进程使用的虚拟内存比可能可用,并且我不知道这个虚拟内存在系统的什么位置。
我可能误解了这些工具的输出,所以如果有人能纠正我,我将不胜感激:我错在哪里,正确的解释是什么,以及如何得出这个解释?
編輯0:我们使用10gen的MMS来监控数据库,从最后一个数据点开始的内存相关部分是:
"mem": {
"virtual": 20749,
"bits": 64,
"supported": true,
"mappedWithJournal": 20376,
"mapped": 10188,
"resident": 1219
},
这个 JSON 特定于数据库进程(我相信)而不是整个系统。
fdisk -l /dev/xvda
/etc/fstab
输出...什么都没有?我也尝试了 3 个 xvda 条目中的每一个:
root@ip:~# fdisk -l /dev/xvda1
Disk /dev/xvda1: 34.4 GB, 34359738368 bytes
255 heads, 63 sectors/track, 4177 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/xvda1 doesn't contain a valid partition table
root@ip:~# fdisk -l /dev/xvda2
root@ip:~# fdisk -l /dev/xvda3
root@ip:~#
編輯1:
cat /proc/meminfo
为了完整性,输出:
MemTotal: 3928924 kB
MemFree: 726600 kB
Buffers: 648368 kB
Cached: 2216556 kB
SwapCached: 0 kB
Active: 1945100 kB
Inactive: 994016 kB
Active(anon): 60476 kB
Inactive(anon): 12952 kB
Active(file): 1884624 kB
Inactive(file): 981064 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 387180 kB
Writeback: 0 kB
AnonPages: 73380 kB
Mapped: 1188260 kB
Shmem: 48 kB
Slab: 149768 kB
SReclaimable: 146076 kB
SUnreclaim: 3692 kB
KernelStack: 1104 kB
PageTables: 16096 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1964460 kB
Committed_AS: 305572 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 16760 kB
VmallocChunk: 34359721448 kB
HardwareCorrupted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 3932160 kB
DirectMap2M: 0 kB
答案1
df
只会显示已安装的文件系统,而不是交换空间。swapon -s
或/proc/swaps
已确定。您的系统没有交换空间。
它看起来top
有点误导,因为它将buffers
值放在与内存统计信息相同的行上,并将cached
值放在与交换统计信息相同的行上。buffer
两者cache
都指存储子系统使用的内存,与交换无关。(见这个答案.)/proc/meminfo
对于查看内存统计数据更加友好一些。
答案2
尝试mkswap /dev/xvda3
然后swapon -a
。但前提是你绝对确定 /dev/xvda3 上没有任何有价值的东西。