Fórum Root.cz
Hlavní témata => Server => Téma založeno: scientific 07. 06. 2021, 12:38:24
-
Ahoj všem, máte pro mě prosím nějaké tipy, jak udělat troubleshooting, proč mám plnou paměť, až to swapuje a systém zamrzá?
Memory
Total: 16G
Used: 5G
Free: 100M
Cache: 9G
Buffers: Skoro nic
Měl jsem za to, že cache se automaticky uvolňuje pokud o tu paměť požádá jiný proces.
Zkoušel jsem něco jako:
sync && echo 3 > /proc/sys/vm/drop_caches
Ani jeden z příkazů ale nic nedělá, jen mi zablokují konzoli.
Zkoušel jsem i něco jako:
sysctl drop_caches=3
Ale to dělalo stejné prd jako výše uvedené příkazy.
Pak jsem ještě zkoušel cgroups pro memory limit toho procesu co takhle plní cache, to se ami ale nepovedlo, viz: https://forum.root.cz/index.php?topic=24845.0
Díky všem za tipy.
BTW: Neptejte se co je to za aplikaci, chci to řešit univerzálně a systémově. Ne nějak přímo přes nějaké konfigurace aplikace.
-
Jako prvni bych se podival na swappiness
cat /proc/sys/vm/swappiness
a pokud neni nastaveno na 0, tak bych tak ucinil
echo 0 > /proc/sys/vm/swappiness
-
Default v Centosu je 10 %.
Když nastavím nulu jak navrhuješ, tak vypnu swap, což jsem už zkoušel přes "swapoff", ale asi to k ničemu nebylo, má vůbec vliv zapnutí/vypnutí swapu na objem cache paměti?
Diskovou cache já přece vůbec neřeším, řeším cache paměti, nikoliv swap.
Nebo to spolu nějak souvisí? Pokud ano, jak? Díky.
-
Pozor na:
The "cached" total will also include some other memory allocations, such as any tmpfs filesytems.
Takze se podivej na mount a df, zda v /dev/shm a /tmp pokud je ramdisk, nemas nejaka mrtva data.
-
Default v Centosu je 10 %.
Když nastavím nulu jak navrhuješ, tak vypnu swap, což jsem už zkoušel přes "swapoff", ale asi to k ničemu nebylo, má vůbec vliv zapnutí/vypnutí swapu na objem cache paměti?
Diskovou cache já přece vůbec neřeším, řeším cache paměti, nikoliv swap.
Nebo to spolu nějak souvisí? Pokud ano, jak? Díky.
Vychazel jsem z prvniho prispevku, kde pises, ze ti to swapuje.
Kdyz nastavis swappiness na 0, tak tim nevypinas swap. Jen tim minimalizujes moznost, ze se nejaka data do swapu dostanou. Jestli jsi ale zkousel swap kompletne vypnout a pote se problem znovu ukazal, tak moji radu ignoruj a hledej jinde.
-
nevím co jsou to "mrtvá data". Já ramdisk nedělal ale nějaké tmpfs tu jsou.
takhle vypadá ten mount a df:
[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=8029984k,nr_inodes=2007496,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime,seclabel)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_cls,net_prio)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,rdma)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
none on /sys/kernel/tracing type tracefs (rw,relatime,seclabel)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /mnt/petr type autofs (rw,relatime,fd=28,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=24048)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel,pagesize=2M)
debugfs on /sys/kernel/debug type debugfs (rw,relatime,seclabel)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=41,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=24094)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
/dev/sdd on /mnt/ssd type ext4 (rw,relatime,seclabel)
/dev/sdf1 on /mnt/thin type ext4 (ro,relatime,seclabel,stripe=8191)
/dev/sde1 on /mnt/hgst type ext4 (rw,relatime,seclabel)
/dev/mapper/cl-centos on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/sdc1 on /boot type ext4 (rw,relatime,seclabel)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
tmpfs on /run/user/1001 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=1609700k,mode=700,uid=1001,gid=1001)
gvfsd-fuse on /run/user/1001/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1001,group_id=1001)
//10.0.0.24/petr on /mnt/petr type cifs (rw,nosuid,nodev,noexec,relatime,vers=1.0,cache=strict,username=admin,uid=1001,forceuid,gid=1001,forcegid,addr=10.0.0.24,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=61440,wsize=65536,bsize=1048576,echo_interval=60,actimeo=1,x-systemd.automount,_netdev)
/dev/sda1 on /mnt/blue type ext4 (ro,relatime,seclabel,stripe=8191)
/dev/sdb1 on /mnt/blue2 type ext4 (ro,relatime,seclabel,stripe=8191)
/dev/sdg1 on /run/media/surf/Thin type ext4 (rw,nosuid,nodev,relatime,seclabel,stripe=8191,uhelper=udisks2)
/dev/sdg1 on /mnt/thin type ext4 (rw,relatime,seclabel,stripe=8191)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 1.3M 7.7G 1% /dev/shm
tmpfs 7.7G 74M 7.7G 1% /run
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/mapper/cl-root 50G 29G 22G 58% /
/dev/sdd 458G 73M 435G 1% /mnt/ssd
/dev/sdg1 293G 154G 124G 56% /mnt/thin
/dev/sde1 458G 165G 270G 38% /mnt/hgst
/dev/mapper/cl-centos 150G 36G 114G 24% /home
/dev/sdc1 976M 293M 616M 33% /boot
tmpfs 1.6G 6.0M 1.6G 1% /run/user/1001
//10.0.0.24/petr 5.5T 3.8T 1.8T 69% /mnt/petr
/dev/sda1 457G 15G 419G 4% /mnt/blue
/dev/sdb1 457G 19G 415G 5% /mnt/blue2
[root@localhost ~]#
jinak bych tu měl ještě /dev/mapper/cl-swap
-
Ano, swapuje, ale to, že swapuje je přece správně? Kdyby neswapoval, tak by to bylo jen horší, takže vypnutí swapu se mi nezdá jako řešení, já potřebuji asi nějak spíše zamezit, abych měl více free, než aby se celá kapacita volné paměti 10G zahltila mezipamětí.
-
a kolik jsou teď tyto hodnoty a nezlepší se to, když je přepíšete?
vm.vfs_cache_pressure=200
vm.swappiness=10
vm.dirty_bytes=67108864
vm.dirty_background_bytes=33554432
-
nevím co jsou to "mrtvá data".
Napr. kdyz v Gentoo prenastavim portage temp dir, kde se buildi do ramdisku a ono to spadne, tak tam zustane treba rozdelana kompilace - pri vetsich baliccich klidne i 1GB.
Vy v tom tmpfs mate jen 1.3+74+6M pouzito, takze to s tim souviset nebude.
Jeste jsem nasel, ze pod cache se taky pocitaj virtualky - nemate neco takoveho pustene? Jinak si uz nedokazu vysvetlit, proc by to drop_caches nemel zrusit. Pripadne specialni soft, co ma pamet zapinovanou pro DMA prenosy.. buhvi.
-
Posílám požadované hodnoty proměnných sysctl:
vm.vfs_cache_pressure = 100
vm.swappiness = 10
vm.dity_bytes = 0
vm.dirty_background_bytes = 0
Procesy virtuální paměti ukazují asi hodně, ale pokud tím jsou myšleny virtuální servery nebo tak něco, tak to nevedu.
Jak poznám aplikaci, která má zmíněnou zapinovanou paměn pro DMA?
Jeden z Vás se měl ještě přes e-mail ptal na slabtop, tak ho posílám v příloze také. Konkrétně se ptal na dentry, které udajně nelze smazat, možná to souvisí s tím DMA
Asi by se mi nejvíce líbilo právě někde třeba přes cgroup nejak buď globálně omezit, aby nemohl existovat proces s více než pár stovek MB cache. Úplně nejlépe kdybych mohl přes cgroup přidělovat jednotlivým aplikacím maximum využití paměti. To se mi ale nedeaří pro moji neznalosti syntaxe linuxu. :-D Viz zde: https://forum.root.cz/index.php?topic=24845.0
-
pokud je vm.dirty_bytes = 0 a vm.dirty_background_bytes = 0, znamená, že jsou nastaveny vm.dirty_ratio a vm.dirty_background_ratio (tak to bylo u starých jader), což jsou procenta z celkové RAM a bývalo to docela hodně, myslím to bývalo 10 a 15 %. Nahraďte to těmi 32 a 64 MB, jak jsem psal.
vfs_cache_presure taky zvětště na těch 200, to zvýší tlak na vyprazdňování cache a bude teda menší
-
ja bych se podival do demsg jestli tam nemate nas...ypano.
-
@Jan Fikar
To co zmiňuješ mám nastaveno takto no:
vm.dirty_background_ratio = 10
vm.dirty_ratio = 40
Mám to tedy být jak to je plus tomu nastavit jak radíš tedy takto:
sysctl vm.vfs_cache_pressure=200
sysctl vm.swappiness=10
sysctl vm.dirty_bytes=67108864
sysctl vm.dirty_background_bytes=33554432
sysctl vm.dirty_background_ratio = 10
sysctl vm.dirty_ratio = 40
Chápu to správně? Snad takto nastavené to zůstane perzistentní a nezmizí to nastavení po rebootu, jinak bych to hádám musel vepsat přímo někam do do souboru /proc/sys/vm/neco?
@e3k: Taky mě to napadlo, ale nic zajímavého co by se týkalo memory tam nevidím.
Jediné trochu zajímavé je, že je tam zaznamenán můj marný pokus o vyprázdnění mezipaměti:
700.735222] bash (487150): drop_caches: 3
[434700.735224] bash (483853): drop_caches: 3
[434701.746225] bash (481074): drop_caches: 3
[434701.747414] sysctl (487765): drop_caches: 3
-
[...] Mám to tedy být jak to je plus tomu nastavit jak radíš tedy takto:
sysctl vm.vfs_cache_pressure=200
sysctl vm.swappiness=10
sysctl vm.dirty_bytes=67108864
sysctl vm.dirty_background_bytes=33554432
sysctl vm.dirty_background_ratio = 10
sysctl vm.dirty_ratio = 40
Chápu to správně? Snad takto nastavené to zůstane perzistentní a nezmizí to nastavení po rebootu, jinak bych to hádám musel vepsat přímo někam do do souboru /proc/sys/vm/neco?
[...]
chapes co nekolikanasobne spatne ;-)
- NEdavaji se mezery kolem =
- sysctl NEnastavuje perzistentne
- v /proc/sys/vm/neco NEjsou (realne) soubory a "zapis" NEni perzistentni
- nastavit vm.dirty*bytes a zaroven vm.dirty*ratio je nesmyl, jsou to 2 moznosti, s tim ze kazda vypina tu predchozi
- pokud to chces nastavit na "stalo", tak v /etc/sysctl.conf, nebo vytvor samostatne /etc/sysctl.d/60-scientific-tuner.conf (cislo >=60, nazev je jedno, koncovka .conf povinna)
BTW: https://www.linuxatemyram.com ;-)
-
jak říká k3dAR: když použijete vm.dirty_bytes i vm.dirty_ratio, tak ten poslední příkaz přemaže ten předchozí
takže všechno s *_ratio vynechat a používat jen *_bytes
takže do /etc/sysctl.conf nejlépe na konec napsat
vm.vfs_cache_pressure=200
vm.swappiness=10
vm.dirty_bytes=67108864
vm.dirty_background_bytes=33554432
to se aktivuje po restartu, případně ručně sudo sysctl -p
a v sysctl.conf mezery kolem rovnítka nevadí
-
Na aplikaci se neptam ,ale xo je to zac? (Domaci c, herni masina, server, strihacsky komp)
Nebezi tam prave nejaky souborovy ci jinyserver?
-
Přidáno do sysctl, ale restartovat to teď nemůžu a sysctl -p se mi zdá, že funguje jinak než si myslíš. Pouze to ukazuje obsah konfiguračního souboru? Nijak neaplikuje tuhle konfiguraci.
Musel jsem pro aplikaci tedy použít ještě:
sudo sysctl vm.vfs_cache_pressure=200
sudo sysctl vm.swappiness=10
sudo sysctl vm.dirty_bytes=67108864
sudo sysctl vm.dirty_background_bytes=33554432
Nic se však pořád neděje. Z 16 GB mám využitu jen 4 GB + 12G cache, ale je tak trochu pravda, že nevím co dělám. Možná to přecejen řeším špatně. Že by se cache měla uvolňovat potřebným chápu, ale já mám pocit, že se neuvolňuje. To se mi pak potvrdilo ještě zmíněným nefunkční echo 3 > /pat/to/memory_caches nebo jak to bylo.
Mám tam různé věci, ale mám pocit, že tohle dělá python skript na zpracovávání videí.
Naučil jsem se měřit iowait a přiznávám, že je možné, že ty zámrzy systému se nedějí kvůli paměti, ale možná kvůli iowaitu, i když nevím jak to funguje, protože disk s videi je bokem a nemá se systémovým diskem nic moc společného, CPU se fláká třeba na 30 %. Může iotop způsobující zřejmě externí disk způsobovat zámrzy systému, který je na jiném (interním) disku?
Protože system monitor mi ukazuje sít, cpu i mememory na 30 % jediný iowait je v červených hodnotách mnohdy na více než 30-40 %. Což mi asi zvedá load avg. takže load avg. je pro mě už dávno nepoužívaný ukazatel. protože si nejsem jistý jeho relevantností. :-)
V jakém případě ná cenu řešit vysoký iowait? Např. v případě, že CPU je využito z více než 90 %? Nebo třeba v případě, kdy ten iowait způsobuje systémový disk? Nebo kdy.
Amatérský dotaz, který neumím vygooglit. To je linux tak hloupý (snad to nikoho nějak nepohorší, nemyslím to zle), že čeká na IO a blokuje tím CPU?, to se to neumí na pozadí nějak samo optimalizovat aby to fungovalo efektivněji? :-)
-
sudo sysctl -p funguje tak, že znova načte /etc/sysctl.conf (případně /etc/sysctl.conf.d/*) a nastaví je
no linux ani cpu asi nemůžou nic dělat, když program chce data z disku a na ně se čeká, co by měl jako dělat mezitím?
co zkusit SSD nebo nějaké rychlejší disky?
jinak obecně swap asi tomu IO nepomůže, je swap na jiném disku, než ten, který čeká na data?
nejde dát víc paměti?
-
Tak žádné SSD asi nepotřebuji, nepotřebuji rychlejší zpracovávání, takhle mi to stačí a iowaitem to není. Cache jsem pošteloval, jak jste mi poradili, asi to něco dělá, ale hlavně si myslím, že pomohlo to vypnutí swapu. Ten swap byl prostě používán nějak hodně i přestože v cache bylo plno paměti k uvolnění a ten starý systémový retro HDD to nějak nedával nebo nevím. Každopádně cache 8 GB mi nevadí, iowait způsobující nesystémový disk mi také nevadí, všechno je nyní dokonalé. Od vypnutí swapu mám pohodičkový load average a nebe je krásně modré, díky všem.
-
OT: Na windows když se vypne swap tak to naopak způsobí problémy. Některé aplikace padnou při spuštění