为什么“top”表示内存使用率低,而“free”表示内存使用率高?
Mem: 262144k total, 225708k used, 36436k free, 47948k buffers
Swap: 262136k total, 40k used, 262096k free, 110704k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1652 root 15 0 79456 14m 1728 S 0.0 5.6 0:00.02 miniserv.pl
3544 root 15 0 87920 3356 2584 R 0.0 1.3 0:00.01 sshd
3707 root 16 0 86704 3104 2416 S 0.0 1.2 0:00.00 sshd
3708 sshd 15 0 61864 1452 872 S 0.0 0.6 0:00.00 sshd
3548 …Run Code Online (Sandbox Code Playgroud) 我在云中有一个 Ubuntu 10.04 Web 服务器,有 1 GB 的 RAM。这是 Munin 的内存图表:

但我很难理解它:一方面,未使用的内存非常高;但是交换内存同时非常高,并且“提交的”内存远远超过实际可用的内存。
只有在没有真正的内存时才应该使用交换吗?这是一个正常的内存使用图,还是这里可能有问题?
好的,所以我有一个 W2008 R2 服务器运行一个网站,每天有大约 100-200 名访问者,并且它还运行了 MSSQL 2008 用于同一网站。
最近,当服务器启动时,它使用正常数量的 RAM(大约 40-50%),然后缓慢但肯定地攀升,直到达到 100% 并且没有人可以再访问该站点。即使重新启动也需要大约 10 分钟才能完成。
在任务管理器中,我看不到具体的罪魁祸首,我可以查明并说导致上述内存泄漏。
奇怪的是,该网站自 2007 年左右开始运行,有时该网站每天有 2000-4000 名独立访问者,浏览量超过 120 万次,而且从来没有出现过任何问题。
现在,如果它运行 2-3 天而不重新启动,那就是一个奇迹。
任何帮助将不胜感激。
编辑:
好的,所以我将我的 SQL 服务器限制为 1,400 MB 的 RAM,resmon.exe一旦问题再次发生,我将使用它。
然而,我更像是一个编程方面的人,而且在服务器管理方面我是个新手;我应该用 perfmon 监控什么?
我正在研究用于科学数据分析的服务器。它运行 RHEL 6.4 它有将近 200GB 的 RAM。对于通过 SSH 的用户来说,它的运行速度非常缓慢,经过一番摸索之后,我很快注意到 RAM 使用率非常高。奇怪的是,即使处于空闲状态,它仍然使用大量 RAM:

我还查看了通过htop,我看不到任何正在运行的进程使用了超过 0.1% 的 RAM。所以我想知道发生了什么?现在,唯一运行的用户启动进程是两个 NFS 挂载共享之间的 rsync。
我尝试重新启动服务器,几分钟后它的响应速度更快,但随后内存使用量再次飙升。
有什么办法可以查明为什么内存使用率如此之高?
比较这个
#免费-m
缓存的已用空闲共享缓冲区总数
电话:72363 68035 4328 0 522 66294
-/+ 缓冲区/缓存:1218 71145
交换:12291 0 12291
和这个:
# snmpwalk -c public -v 2c localhost .1.3.6.1.4.1.2021.4 UCD-SNMP-MIB::memIndex.0 = 整数:0 UCD-SNMP-MIB::memErrorName.0 = STRING:交换 UCD-SNMP-MIB::memTotalSwap.0 = 整数:12586888 kB UCD-SNMP-MIB::memAvailSwap.0 = 整数:12586784 kB UCD-SNMP-MIB::memTotalReal.0 = 整数:74100516 kB UCD-SNMP-MIB::memAvailReal.0 = 整数:4429580 kB UCD-SNMP-MIB::memTotalFree.0 = 整数:17016364 kB UCD-SNMP-MIB::memMinimumSwap.0 = 整数:16000 kB UCD-SNMP-MIB::memBuffer.0 = 整数:534804 kB UCD-SNMP-MIB::memCached.0 = 整数:44238560 kB UCD-SNMP-MIB::memSwapError.0 = INTEGER: noError(0) UCD-SNMP-MIB::memSwapErrorMsg.0 = 字符串:
为什么免费为“缓存”显示 66294MB 而snmp 为“memCached”显示大约 44238MB?不应该是一样的吗?
查看 MIB,我看到“memCached”是用于缓存的“物理或虚拟”内存。(不要告诉我它会将磁盘缓存放入交换区)^^
目标是free通过snmp找出真正的空闲物理内存(即此处为 71145,如 …
更新:
这是由于 nss-softkn 的一个已知问题引起的。见这篇文章:https : //www.splyt.com/blog/2014-05-16-optimizing-aws-nss-softoken
当我从我的 centos 6.5 机器上运行 free -m 时,我看到我只有大约 1400 mb 的可用内存,包括缓存。当我做 top 时,按内存排序并加起来我只看到大约 1600 个正在使用的进程。我应该有更多的空闲内存。这发生在我们的几个盒子上。
[root@db1 ~]# free -m
total used free shared buffers cached
Mem: 7840 7793 47 0 287 1357
-/+ buffers/cache: 6148 1692
Swap: 7983 7 7976
Run Code Online (Sandbox Code Playgroud)
最高输出
这是可视化进程消耗的内存的更好方法:

有没有办法让非特权用户或 root 允许非特权用户创建一个 systemd 作用域(或由 systemd 管理的其他控制组),以便限制该作用域的内存使用量,并且该限制可以由用户?
或者说,为什么这样达不到上面描述的效果:
$ systemd-run --scope --user --unit=limit-test.scope bash
Running as unit limit-test.scope.
$ systemctl show --user limit-test.scope |grep Mem
MemoryAccounting=no
MemoryLimit=18446744073709551615
$ systemctl set-property --user limit-test.scope MemoryAccounting=yes
$ systemctl set-property --user limit-test.scope MemoryLimit=100M
$ systemctl show --user limit-test.scope |grep Mem
MemoryAccounting=yes
MemoryLimit=104857600
$ python
>>> a = [1]*1000000000 # happily eats 7.4G of RAM
Run Code Online (Sandbox Code Playgroud)
我正在使用 systemd 215 的 Debian stable 上进行测试。内核是 3.18.2 并使用所需的支持进行编译,我相信:
$ zgrep -E 'CGROUP|MEMCG' /proc/config.gz
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is …Run Code Online (Sandbox Code Playgroud) 我在 Digital Ocean 上为最小的 Droplet 设置了一个 WordPress 几个月。
最近,我的博客疯传(1000+ facebook 分享),服务器需要 50 多秒才能响应。(Google Analytics 显示今天几乎一整天都有大约 40 人同时访问我的博客。)
我询问 Digital Ocean 支持团队,他们告诉我我的 512 MB RAM 太小了。
但我使用“free -m”并看到
total used free shared buffers cached
Mem: 490 465 24 64 94 136
-/+ buffers/cache: 234 256
Swap: 999 0 999
Run Code Online (Sandbox Code Playgroud)
所以我认为我有 256 MB 可用内存?
我告诉他们,他们说“虽然它可能显示 100MB 的可用内存,但这可能只是在它终止了一些服务以节省内存之后。”
但我使用“顶部”并看到
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
Run Code Online (Sandbox Code Playgroud)
我发现CPU保持在92~100% id,所以我认为我的CPU不忙。
那么如何才能找到瓶颈呢?
我想在支付更多升级费用之前知道瓶颈是什么。
根据 proc(5) 的 linux 手册页:
/proc/[pid]/statm 提供有关内存使用情况的信息,以页为单位。列是:
Run Code Online (Sandbox Code Playgroud)size (1) total program size (same as VmSize in /proc/[pid]/status) resident (2) resident set size (same as VmRSS in /proc/[pid]/status) share (3) shared pages (i.e., backed by a file) text (4) text (code) lib (5) library (unused in Linux 2.6) data (6) data + stack dt (7) dirty pages (unused in Linux 2.6)
如果我将结果与 ubuntu 系统监视器进行比较,单位似乎是 Mb,但我不是 100% 确定。“以页为单位”是什么意思?
这些free命令以两种形式提供可用内存量:完全可用内存(Mem行)和用于缓存和缓冲区的一次性内存(-/+ buffers/cache行):
-bash-3.2$ free -m
total used free shared buffers cached
Mem: 16057 15173 884 0 17 2520
-/+ buffers/cache: 12635 3422
Swap: 12287 4937 7350
Run Code Online (Sandbox Code Playgroud)
在此示例中,不包括缓冲区和缓存的可用内存为 884 MB,包括缓冲区和缓存的可用内存为 3422 MB。
如何在 中获得第二个测量值(可用内存,包括缓冲区和缓存)sar?