Bol miktarda bellek varken neden “değiştiremiyorum”?


10

Son zamanlarda sistemimde çok fazla bellek olmasına rağmen fark ettim:

# free -m
             total       used       free     shared    buffers     cached
Mem:         15965       9680       6284         35       1754       2560
-/+ buffers/cache:       5365      10599
Swap:         2047        258       1789

swapoff -a2G takas dosyamla yapamam

-rw-r----- 1 root root 2.0G Feb  9 21:34 /2GB.swap

Aşağıdaki çekirdek parametrelerini değiştirdim sysctlancak bunun nedeni olmalı:

vm.swappiness = 5
vm.vfs_cache_pressure = 200

Herhangi bir sebep:

# swapoff -a
swapoff: /2GB.swap: swapoff failed: Cannot allocate memory

? başarısız dmesgolduğunda hiçbir şey swapoffkaydetmez. Linux çekirdeği kullanıyorum 4.19.20-041920-generic.


Dahil başka bir örnek /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

ve 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

DÜZENLE

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 +++

Sisteminiz değiştiriliyorsa, takas bölümünün çıkarılması herhangi bir sorunu çözmez. Sadece ek sorunlar yaratacaksınız (ve BTW önce bir bölüm, sonra bir dosya kullanmak daha iyidir). Programların bu dosyaya veri aktarmadığı bir an bulmanız gerekebilir. Belki bu tür programları DURMALISINIZ. Not: parçalanmış bellek bir sebep olabilir. syncKirli sayfaları azaltmak için birkaç kez de deneyin .
Giacomo Catenazzi

1
@GiacomoCatenazzi 1) Bir bölümü kullanmak neden bir dosyadan daha iyidir? 2) syncbellek kullanımını bir bit değiştirmez
Patryk

1
synckirli sayfaları diske yazar (tümü değil, bu sayfaların diskte olması gerektiği zaman). Bu, bu tür sayfaları temiz hale getirir, böylece kolayca atılabilirler (değiştirmeden veya diske yazmadan), böylece çekirdek hızlı bir şekilde önbelleğe alınmış olandan boşluğa dönüşebilir. Kritik fazları (takas / umount) kısaltmak çok kısa süreli bir numaradır.
Giacomo Catenazzi

2
Bölüm, çekirdeğin doğrudan kontrolündedir (tek bitişik blok, hizalı). Dosyalar: Yeterli bitişik alan veya diğer sistem yardımcı programlarından kaynaklanan parazitlenme riski vardır). [ve ideal kök dosya sistemi salt okunur olmalıdır]. [Ve genellikle geçici bir bölüme sahip olmak, sistemi kurtarmak ya da özellikle uzak makinelerde veya kolay önyüklenebilir aygıt bulunmayan makinelerde “invaziv” sistem işlemesi yapmak yararlıdır. Zor bir gereklilik değil, ama bunun için özel bir bölüme sahip olmak için çok daha az sorunlu buldum [ve RAID makineleri için hız için takas açamazsınız]
Giacomo Catenazzi

1
Sorun hala ... Takas dosyasının TOPLAM boyutundan daha fazla boş RAM var. Takas neden devre dışı bırakılamıyor?
Paul Stelian

Yanıtlar:


1

Gönderen Örnek Olay: swapoff Bellek Ayır Can değil .

İşlemler takas alanının ve (RAM'in bir kısmının) toplamından daha fazla bellek ayırıyorsa ve sisteminiz belleği fazla işlemeyecek şekilde yapılandırılmışsa, ayırma başarısız olur. Bu, bol miktarda RAM'iniz olmasa ve takas alanında herhangi bir sayfa kullanmıyorken bile olabilir.


@Patryk, fazla taahhüdünüz neye ayarlanmış?
Daniel Farrell

0

Takas dosyanız tanımlanmışsa /etc/fstab(systemd-takas alanında değil), o zaman satırı kaldırın /etc/fstabve yeniden başlatın.

Eğer yapılandırmak takas etmek systemd-takas kullanıyorsanız, o zaman set swapfc_enabled=0içinde Swap File Chunkedbölümüne /etc/systemd/swap.confve yeniden başlatma.


Takas dosyası olmadan sistemi açabileceğinizi gerçekten takas dosyasının neden kullanılıyorsa, neden kapatılamayacağı sorusunu cevapladığını sanmıyorum .
ilkkachu

Yeniden tolere edilebiliyorsa yeniden başlatma kolay bir çözümdür
Daniel Farrell
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.