Updater failed - Out of memory

Zdravím,

posledních pár releasů se potýkám s touto chybou:

Updater failed: Failed to fork command /tmp/updater-busybox-hjhMfo/busybox: Out of memory

Zřejmě se řešilo i zde, ale nijak nedořešilo.

Problémem je, že kvůli nedostatku paměti selže aktualizace. Po rebootu routeru, kdy se paměť na chvíli uvolní, update proběhne úspěšně. Takže tragédie to není, ale není to žádaný stav. Paměť je samozřejmě zaplněná:

         total       used       free     shared    buffers     cached

Mem: 1030732 993544 37188 256660 2036 543596
-/+ buffers/cache: 447912 582820
Swap: 0 0 0

Nicméně vzhledem k logice cache by se půlka dle potřeby uvolnit měla, což zřejmě neprobíhá. Ještě mě mate ten swap. Přes Luci jsem si alokoval 4G, které se vidno, ale také neuplatňují:

Disk /dev/sda1: 4 GiB, 4294967296 bytes, 8388608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Filesystem Size Used Available Use% Mounted on
/dev/mmcblk0p1 7.3G 2.8G 4.6G 38% /
tmpfs 503.3M 180.8M 322.5M 36% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
/dev/sdb1 365.8G 274.6G 72.5G 79% /mnt/nas
/dev/sda2 107.8G 5.6G 101.5G 5% /srv
/dev/sdb1 365.8G 274.6G 72.5G 79% /tmp/run/mountd/sdb1
/dev/sda1 3.9G 16.0M 3.6G 0% /tmp/run/mountd/sda1

Nějaký nápad jak z toho ven, případně , co jsem udělal špatně u SWAP jednotky?

Díky

To odkázané vlákno jsem pochopil tak, že pomohlo promazání obsahu nějakých tmpfs, ale to neznamená že zde jde nutně o něco podobného.

Pravda, když to teď znovu pročítám, tak by to tak mohlo být. Prve mě ještě zmátlo těch 17G, nicméně mě to taktéž ukazuje zbývající velikost /dev/sdb1, byť přímo lezu pod /tmp:

root@turris:~# cd /tmp
root@turris:/tmp# du -sh
274.7G .

Kovaný linuxák nejsem, takže mi vidno uniká nějaká pointa a nechci tak zatím použít příkaz

rm -r *

Takto to vypadá, že si odkládá data na připojený USB disk. Čemuž i odpovídá výpis z adresáře:

Summary

root@turris:/tmp# du
0 ./pymp-ffz9lyzs
0 ./pymp-gstfbf1p
0 ./pymp-91xdv7wt
0 ./pymp-y44oqo7k
28 ./fw-rules
568 ./updater-busybox-eaLJih
4 ./update-state
0 ./.uci-foris-controller
12 ./user_notify/1555532966-22618
12 ./user_notify
0 ./cache/netdata
0 ./cache
0 ./suricata
320 ./luci-modulecache
8 ./.foris_workdir/dynamic_assets/config/cs/javascript
8 ./.foris_workdir/dynamic_assets/config/cs
8 ./.foris_workdir/dynamic_assets/config
88 ./.foris_workdir/dynamic_assets
88 ./.foris_workdir
0 ./pymp-whol_emy
0 ./pymp-3gb7hh_0
0 ./mounts
0 ./nmbd
0 ./kresd/tty
384 ./kresd
0 ./empty
0 ./spool/cron/atspool
0 ./spool/cron/atjobs
0 ./spool/cron
0 ./spool
4 ./ucollect
0 ./dnsmasq.d
8 ./hosts
0 ./lib/sudo
4 ./lib/netdata/registry
8 ./lib/netdata
0 ./lib/misc
115260 ./lib
4 ./etc/ssh
28 ./etc
4 ./lvm/cache
4 ./lvm
0 ./.jail
0 ./.uci
0 ./log/netdata
4 ./log/suricata
4 ./log/lighttpd
0 ./log/cores/nmbd
0 ./log/cores/smbd
0 ./log/cores
804 ./log
0 ./extroot
8 ./sysinfo
8 ./state
0 ./lock/lvm
160 ./lock
0 ./run/suricata
336 ./run/minidlna
16 ./run/mountd/sda1/lost+found
20 ./run/mountd/sda1
1208 ./run/mountd/sdb1/transmission/torrents
44 ./run/mountd/sdb1/transmission/resume
13623904 ./run/mountd/sdb1/transmission/done/Get.Out.2017.Bluray.1080p.DTS-HD.x264-Grym
8 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD/BDMV/PLAYLIST
8 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD/BDMV/BACKUP/PLAYLIST
56 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD/BDMV/BACKUP/CLIPINF
76 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD/BDMV/BACKUP
56 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD/BDMV/CLIPINF
32 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD/BDMV/META/DL
36 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD/BDMV/META
22300424 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD/BDMV/STREAM
22300612 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD/BDMV
22300616 ./run/mountd/sdb1/transmission/done/VENOM 2018 BD
14672416 ./run/mountd/sdb1/transmission/done/Elementary_SE01-SE06_1080p_CZ/SE04
24309752 ./run/mountd/sdb1/transmission/done/Elementary_SE01-SE06_1080p_CZ/SE01
16222884 ./run/mountd/sdb1/transmission/done/Elementary_SE01-SE06_1080p_CZ/SE02
15919820 ./run/mountd/sdb1/transmission/done/Elementary_SE01-SE06_1080p_CZ/SE03
13904252 ./run/mountd/sdb1/transmission/done/Elementary_SE01-SE06_1080p_CZ/SE05
13408352 ./run/mountd/sdb1/transmission/done/Elementary_SE01-SE06_1080p_CZ/SE06
98437480 ./run/mountd/sdb1/transmission/done/Elementary_SE01-SE06_1080p_CZ
8022868 ./run/mountd/sdb1/transmission/done/Get Out - Uteč (2017)
287890532 ./run/mountd/sdb1/transmission/done
4 ./run/mountd/sdb1/transmission/blocklists
287891800 ./run/mountd/sdb1/transmission
16 ./run/mountd/sdb1/lost+found
287891820 ./run/mountd/sdb1
287891840 ./run/mountd
4 ./run/dnsmasq
0 ./run/hostapd
0 ./run/rpcd
287892276 ./run
0 ./shm
288010136

Z logiky bych předpokládal, že /tmp adresář se nachází přímo v RAM, čímž se pak pochopitelně po rebootu smaže. A mnou vytvořený swap se nachází na alokované části SD disku. Ale podle vypsaného filesystemu to aspoň mně, vyznívá jinak.

Pokud chcete swapovat, musíte si nejdříve swap připravit.

  1. Odmountujte všechny sda1
  2. Odstraňtě všechny mountovací body
  3. Vytvořte swap partition příkazem:
mkswap /dev/sda1
  1. Pokud jste odstranil i SWAP přípojný bod, nově ho vytvořte.
  2. Restartujte router. Již by se v LuCI v přehledu mělo objevit SWAP.

Jinak by bylo asi dobré, pokud tedy používáte fstab (Přípojné body), vypnout službu automount příkazem:

/etc/init.d/mountd disable

a restartovat router.

Díky, SWAP jsem nyní zprovoznil, vypnul jsem i ten automount a odmoutoval:

/dev/sdb1
/dev/sda1

Takže nyní se mi i dobře zobrazuje /tmp

Teď je otázkou, zda to řeší problém. To poznám až při dalším updatu.

Také nevím, jestli Vám to problém vyřeší, ale příspěvek jsem psal jako motivace pro sprovoznění SWAP. Co si čtu toto fórum, tak ve většině případů můžou za plnění /tmp databáse programů, jako např. minidlna - vytváření databáse je na špatném místě a je zapotřebí ji navést na jiné uložiště.

Toho jsem si také všiml, hlavně u pakonu si na to stěžují. Nicméně mě plnění /tmp nevadí, důležité je, aby se v případě potřeby uvolnilo. Případně bych se tady na foru inspiroval.