我看到 kswapd 使用 100% CPU ......我怎么知道代表哪个进程使用 kswapd 这么多?
最近我的朋友告诉我,在有足够内存的 linux 网络服务器上关闭交换是个好主意。我的服务器有 12 GB,目前在峰值负载下使用 4 GB(不包括缓存和缓冲区)。
他的论点是,在正常情况下,服务器永远不会使用其所有 RAM,因此它遇到 OutOfMemory 情况的唯一方法是由于某些错误/ddos/等。因此,如果关闭交换,系统将耗尽内存,最终会导致占用内存的程序(很可能是 Web 服务器进程)和其他一些进程崩溃。如果打开了交换它会同时占用 RAM 和交换空间,最终会导致同样的崩溃,但在此之前,它会卸载关键进程(如 sshd)进行交换,并开始执行大量交换操作,从而导致速度大幅下降。这样,当在 ddos 系统下可能会由于巨大的滞后而进入完全无法使用的状态时,我可能无法登录并终止网络服务器进程或拒绝所有传入流量(除了 ssh)。
这是正确的吗?我是否遗漏了什么(例如,即使我有足够的 RAM,交换分区在某些方面也非常有用)?我应该关掉它吗?
我们在 ESXi 上运行一些 Solaris / Linux VM,其中包含非常敏感的加密数据,这些数据最终会根据需要在内存中解密。
一切都很好,除了可能存储一些解密数据的 ESXi 交换文件,最重要的是,如果主机崩溃,这些文件不会被删除。
有没有办法完全禁用这些文件?
我们已经尝试在每个 VM 的基础上将整个分配的 RAM 保留给 VM,但仍然会创建文件。
为整个主机或仅为某些 VM 完全禁用 ESXi 交换需要什么?
最近,我在服务器中放入了更多内存,现在总共有 24GB 的内存。最初,我将操作系统设置为具有 2GB 的交换大小。
/dev/sdc1 1 281 2257101 82 Linux swap / Solaris
/dev/sdc2 * 282 60801 486126900 83 Linux
Run Code Online (Sandbox Code Playgroud)
目前为交换分配了 2GB,但阅读它似乎并不多。对于 24GB 的系统,我想分配至少 10GB 的交换空间。
我的问题是:我可以在操作系统运行时执行此操作吗?我必须重新安装吗?我正在使用 OpenSuse 11.3
如何在 Linux 中更改交换分区?如果我目前使用 /dev/hda3 进行交换,而我更愿意使用 /dev/hda4,我应该执行哪些步骤?
每当交换使用率达到 100% 时,我都会收到警报电子邮件。就我而言,交换使用量以后不会减少(即使内存可用),因此我每小时都会收到一封警报电子邮件。
如何在不重新启动 Linux 服务器的情况下减少交换使用?
我的 Ubuntu 消耗的内存比任务管理器显示的要多:
sudo ps -e --format rss | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
2750.29
free -m
total used free shared buffers cached
Mem: 3860 2765 1094 0 3 300
-/+ buffers/cache: 2461 1398
Swap: 2729 2374 354
Run Code Online (Sandbox Code Playgroud)
真奇怪。有人可以解释这种差异吗?
但更重要的是:我想知道一个进程真正使用了多少内存。我不想知道虚拟内存大小,而是想知道常驻内存加上进程的交换。
我还尝试输出“ps”的格式参数“sz”,但其总和很高(16000 MB)(参数“size”给出了 36700 MB)。还有其他选择吗?
我真的很想用它来确定哪些程序/进程正在消耗大量内存(和交换),杀死它们,因为内存很有价值:-) 这真的没有意义,所以我在这里问。
/proc/meminfo 的输出:
MemTotal: 3952812 kB
MemFree: 1119192 kB
Buffers: 2676 kB
Cached: 290068 kB
SwapCached: 160980 kB
Active: 1805396 kB
Inactive: 731680 kB
Active(anon): 1745820 kB
Inactive(anon): 689184 kB
Active(file): 59576 kB
Inactive(file): 42496 …Run Code Online (Sandbox Code Playgroud) 全新安装的 Ubuntu Server 拒绝启动并挂起“在 /dev/mapper/test--vg-swap_1 上添加 524284k 交换。优先级:-1 范围:1 跨:524284k
我可以通过进入恢复模式并恢复到正常启动来解决这个问题。
我有一个用作 SAN 存储的 linux 盒子。它配备了 14 个 SATA HDD,它运行的唯一软件是 iSCSI 目标和 zabbix 代理。这是物理盒子,不是虚拟机。
安装的 RAM 大小为 128 GB,swap 被安排为 4 GB,当 RAM 很大时没有人关心它的大小,但是随着机器运行(正常运行时间为 694 天)swap 越来越多地使用,现在它用于~80%。
htop 不会显示任何不好的东西,看起来操作系统使用 RAM 作为缓存等swappiness设置为 10,然后设置为 1,没有任何帮助。当然我可以完全禁用交换,但看起来这将是一个糟糕的举动。
所以我的问题很简单,如何将盒子设置为使用 RAM 而不是使用交换,以及为什么它在 RAM 足够的情况下完全使用交换?
这是 SAN,所以它服务的是块而不是文件,所以缓存可以基于块来完成,如果 RAM 有限,可以轻松减少,无论如何它不会影响 iSCSI 的逻辑。
Zabbix 说现在我有可用的 RAM = 123.22 GB(嘿,几乎都是 128 GB!),使用的交换是 3.24 GB 的 4 GB。
swap ×10
linux ×7
ubuntu ×3
memory ×2
centos5 ×1
debian ×1
encryption ×1
iscsi ×1
performance ×1
security ×1
ubuntu-12.04 ×1
vmware-esxi ×1
web-server ×1