私のシステムには多くのメモリがあるにもかかわらず、最近気づきました。
# free -m
total used free shared buffers cached
Mem: 15965 9680 6284 35 1754 2560
-/+ buffers/cache: 5365 10599
Swap: 2047 258 1789
swapoff -a
2Gスワップファイルではできません
-rw-r----- 1 root root 2.0G Feb 9 21:34 /2GB.swap
次のカーネルパラメータを変更しましたが、sysctl
それが原因であるはずです。
vm.swappiness = 5
vm.vfs_cache_pressure = 200
理由:
# swapoff -a
swapoff: /2GB.swap: swapoff failed: Cannot allocate memory
?失敗してdmesg
も何も記録しませんswapoff
。Linuxカーネルを使用しています4.19.20-041920-generic
。
含む別の例 /proc/meminfo
# cat /proc/meminfo
MemTotal: 16348296 kB
MemFree: 6673788 kB
MemAvailable: 11233052 kB
Buffers: 525048 kB
Cached: 2837788 kB
SwapCached: 362556 kB
Active: 4728244 kB
Inactive: 2758260 kB
Active(anon): 3132940 kB
Inactive(anon): 1043676 kB
Active(file): 1595304 kB
Inactive(file): 1714584 kB
Unevictable: 2396 kB
Mlocked: 2396 kB
SwapTotal: 2097148 kB
SwapFree: 1124272 kB
Dirty: 336 kB
Writeback: 0 kB
AnonPages: 3786868 kB
Mapped: 699944 kB
Shmem: 53116 kB
Slab: 1770268 kB
SReclaimable: 1578564 kB
SUnreclaim: 191704 kB
KernelStack: 47216 kB
PageTables: 82968 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 10271296 kB
Committed_AS: 24712604 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
Percpu: 3552 kB
HardwareCorrupted: 0 kB
AnonHugePages: 26624 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 714480 kB
DirectMap2M: 13891584 kB
DirectMap1G: 3145728 kB
そして free -m
# free -m
total used free shared buffers cached
Mem: 15965 9447 6517 51 512 2771
-/+ buffers/cache: 6163 9801
Swap: 2047 950 1097
編集
strace swapoff -a
root@MACHINE:~# strace swapoff -a
execve("/sbin/swapoff", ["swapoff", "-a"], [/* 22 vars */]) = 0
...
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=9469488, ...}) = 0
mmap(NULL, 9469488, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fd262737000
close(3) = 0
open("/proc/swaps", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd263a54000
read(3, "Filename\t\t\t\tType\t\tSize\tUsed\tPrio"..., 1024) = 102
readlink("/2GB.swap", 0x7ffcfbb3bea0, 4096) = -1 EINVAL (Invalid argument)
read(3, "", 1024) = 0
close(3) = 0
munmap(0x7fd263a54000, 4096) = 0
swapoff("/2GB.swap") = -1 ENOMEM (Cannot allocate memory)
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2570, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd263a54000
read(3, "# Locale name alias data base.\n#"..., 4096) = 2570
read(3, "", 4096) = 0
close(3) = 0
munmap(0x7fd263a54000, 4096) = 0
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
...
open("/usr/share/locale-langpack/en/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "swapoff: ", 9swapoff: ) = 9
write(2, "/2GB.swap: swapoff failed", 25/2GB.swap: swapoff failed) = 25
write(2, ": ", 2: ) = 2
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
...
open("/usr/share/locale-langpack/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "Cannot allocate memory\n", 23Cannot allocate memory
) = 23
open("/etc/fstab", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=838, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd263a54000
read(3, "# /etc/fstab: static file system"..., 4096) = 838
readlink("/2GB.swap", 0x7ffcfbb3c2b0, 4096) = -1 EINVAL (Invalid argument)
read(3, "", 4096) = 0
close(3) = 0
munmap(0x7fd263a54000, 4096) = 0
exit_group(-1) = ?
+++ exited with 255 +++
@GiacomoCatenazzi 1)ファイルよりもパーティションを使用した方がよいのはなぜですか?2)
—
Patryk
sync
メモリ使用率を1ビットも変更しない
sync
ダーティページをディスクに書き込みます(すべてではありませんが、これらのページがディスク上にある必要がある場合)。これにより、そのようなページがクリーンになり、ページを簡単に(スワッピングしたりディスクに書き込んだりせずに)破棄できるため、カーネルはメモリの一部をキャッシュされたものから空きにすばやく変換できます。重要なフェーズ(スワップオフ/マウント)を短縮することは、非常に短期間のトリックです。
パーティションはカーネルの直接制御下にあります(単一の連続ブロック、整列)。ファイル:十分な連続スペースまたは他のシステムユーティリティからの干渉がないリスクがあります)。[理想的なルートファイルシステムは読み取り専用である必要があります]。[そして、特にリモートマシンや、簡単に起動できるデバイスがないマシンでは、一時的なパーティションを用意したり、システムを復旧したり、「侵入的」システムを処理したりするのに便利です。難しい要件ではありませんが、そのための特別なパーティションを用意することで問題が少なくなることがわかりました[RAIDマシンの場合は、RAIDスワップを解除して速度を上げることができます]
—
Giacomo Catenazzi
問題はまだです...スワップファイルの合計サイズよりも多くの空きRAMがあります。スワップを無効にできないのはなぜですか?
—
Paul Stelian
sync
ダーティページを減らすために、たぶん数時間も試してください。