최근에 시스템에 많은 메모리가 있어도 다음과 같이 나타났습니다.
# 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
. 나는 리눅스 커널을 사용하고 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 기계 할 수 있습니다 unRAID 스왑, 속도]
—
자코모 Catenazzi
문제는 여전히 ... 스왑 파일의 총 크기보다 많은 여유 RAM이 많이 있습니다. 스왑을 비활성화 할 수없는 이유는 무엇입니까?
—
Paul Stelian
sync
더러워진 페이지를 줄이려면 몇 번 시도해보십시오 .