# wyciek pamieci

## Xywa

Witam,

Mam problem z wyciekiem pamieci. Laptop - 3GB, po uruchomieniu KDE zazwyczaj mam włączone 3 przeglądarki + program pocztowy kmail i od czasu do czasu włączam Gimpa do małego resizeu i LibreOffcie. Od czasu do czasu przełączam też pomiędzy wirtalnymi pulpitami

Po uruchomieniu mam użyte 1G i 2G wolne, ale w miare minut okazuje się że pamięci ubywa. Na tę chwilę, ok. 30 min po włączeniu system zaczyna już uzywać swapa z dysku twardego i system odczuwalnie zwalnia. W tej chwili używam top, który wkazuje to co poniżej. Czy to wina jakiegoś programu, czy po prostu nowe kde ma takie wymagania?

```
$ top

top - 12:42:51 up 57 min,  3 users,  load average: 0.29, 0.26, 0.23

Tasks: 158 total,   1 running, 156 sleeping,   0 stopped,   1 zombie

Cpu(s): 10.8%us, 13.7%sy,  0.0%ni, 74.8%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   2826332k total,  2684496k used,   141836k free,    59612k buffers

Swap:  3028216k total,     1640k used,  3026576k free,   829440k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                

 2986 r    20   0  808m 321m  31m S    2  11.6   2:55.86 opera                                                                  

 2255 ro  20   0  269m 181m  20m S   35  6.6   6:09.15 X                                                                      

 4006 r    20   0  243m 164m  20m S    0  6.0   0:25.43 operapluginwrap                                                        

 3116 r    20   0  926m 152m  45m S    0  5.5   1:44.34 kontact                                                                

 4420 r    20   0  856m 126m  39m S    0  4.6   0:17.09 firefox                                                                

 3894 r    20   0  195m 116m  19m S    0  4.2   0:15.35 operapluginwrap                                                        

 4834 r    20   0 1099m 114m  19m S    0 4.2   0:10.17 chrome                                                                 

 4783 r    20   0  835m  96m  49m S    0  3.5   0:07.92 chrome                                                                 

 2434 r    20   0  813m  87m  49m S    6  3.2   1:33.52 kwin                                                                   

 4138 r    20   0  134m  78m  24m S    0  2.9   0:29.00 operapluginwrap                                                        

 2481 r    20   0  816m  70m  34m S    4  2.6   0:23.45 plasma-desktop                                                         

 2531 r    20   0  591m  67m  36m S    0  2.4   0:00.86 python2                                                                

 4444 r    20   0  133m  55m  19m S    0  2.0   0:14.57 operapluginwrap                                                        

 2653 r    20   0  494m  50m  29m S    0  1.8   0:00.69 python2.7                                                              

 2528 r    20   0  778m  49m  27m S    0  1.8   0:02.62 krunner                                                                

 2655 r    20   0  391m  47m  24m S    0  1.7   0:01.26 wicd-client                                                            

 2366 r    20   0  671m  47m  23m S    0  1.7   0:02.23 kded4                                                                  

 5525 r    20   0  568m  45m  24m S    0  1.6   0:02.32 dolphin                                                                

 2477 r    20   0  586m  45m  27m S    2  1.6   1:04.20 knotify4                                                               

 4836 r    20   0  639m  41m  112 S    1  1.5   0:10.02 Chrome_ProcessL                                                        

 2360 r    20   0  390m  40m  28m S    0  1.5   0:00.66 kdeinit4                                                               

 2661 r    20   0  543m  36m  18m S    0  1.3   0:00.60 kmix                                                                   

 4789 r    20   0  456m  35m  24m S    0  1.3   0:00.05 chrome                                                                 

 5676 r    20   0  492m  35m  18m S    1  1.3   0:00.84 konsole                                                                

 3118 r    20   0  470m  32m  16m S    0  1.2   0:00.42 kwalletd                                                               

 2666 r    20   0  467m  31m  14m S    0  1.1   0:00.44 klipper                                                                

 2506 r    20   0  466m  30m  13m S    0  1.1   0:00.48 kaccess                                                                

 2375 r    20   0  459m  29m  13m S    0  1.1   0:00.48 kglobalaccel                                                           

 2498 r    20   0  285m  29m 5108 S    0  1.1   0:05.79 mysqld                                                                 

 2404 r    20   0  467m  28m  14m S    0  1.0   0:00.40 ksmserver                                                              

 4792 r    20   0  187m  23m  14m S    0  0.8   0:00.02 nacl_helper_boo                                                        

 2552 r    20   0  363m  23m  18m S    0  0.8   0:00.29 akonadi_kabc_re                                                        

 2364 r    20   0  395m  22m 9.8m S    0  0.8   0:00.25 klauncher
```

----------

## SlashBeast

Odpal ps_mem ktory powie Ci, co je najwiecej tego ramu.

http://www.pixelbeat.org/scripts/ps_mem.py

----------

## Xywa

 *SlashBeast wrote:*   

> Odpal ps_mem ktory powie Ci, co je najwiecej tego ramu.
> 
> http://www.pixelbeat.org/scripts/ps_mem.py

 

Wielkie THX!

Fajny skrypcik - sam pisałeś?

----------

## dylon

Ja obserwuję to samo na oko gdzieś od kde4.4.

Mam 2GB ramu i w zasadzie po chwili od uruchomienia mam zajęte cały ram i ok 500MB swap - włączam zazwyczaj firefoxa (chrome podobnie ramu żre), thunderbirda, pan, tlen a reszta sporadycznie.

(włączone kde z kilkoma programami uruchamianymi przy starcie kde - zajęte jest ok 900MB) 

Jednak faktycznie pamięcie zajętej jest ~1GB a reszta to bufory i chyba w zarządzaniu nimi jest problem.

----------

## Xywa

U mnie wygląda to tak (teraz) - kde + opera + kmail i wg top z 3G mam prawie 2G w uzyciu

 *Quote:*   

> Mem:   2826332k total,  2140820k used,   685512k free,    78824k buffers

 

wg skryptu tylko 1.3G w użyciu - ciekawe skąd takie różniec w porównaniu z top:

```
# ./ps_mem 

 Private  +   Shared  =  RAM used       Program 

104.0 KiB +  13.0 KiB = 117.0 KiB       kwrapper4

140.0 KiB +  17.0 KiB = 157.0 KiB       init

148.0 KiB +  29.5 KiB = 177.5 KiB       ck-launch-session

160.0 KiB +  25.0 KiB = 185.0 KiB       operaplugincleaner

192.0 KiB +  19.0 KiB = 211.0 KiB       dhcpcd

204.0 KiB +  30.0 KiB = 234.0 KiB       cron

212.0 KiB +  28.0 KiB = 240.0 KiB       xinit

256.0 KiB + 105.5 KiB = 361.5 KiB       libreoffice

328.0 KiB +  34.0 KiB = 362.0 KiB       dbus-launch

332.0 KiB +  46.0 KiB = 378.0 KiB       gam_server

280.0 KiB + 115.5 KiB = 395.5 KiB       startx

288.0 KiB + 121.0 KiB = 409.0 KiB       startkde

512.0 KiB +  57.0 KiB = 569.0 KiB       top

420.0 KiB + 153.5 KiB = 573.5 KiB       su

580.0 KiB + 174.0 KiB = 754.0 KiB       oosplash.bin

588.0 KiB + 181.5 KiB = 769.5 KiB       login

784.0 KiB +  38.5 KiB = 822.5 KiB       wpa_supplicant

776.0 KiB + 172.5 KiB = 948.5 KiB       agetty (5)

368.0 KiB +   1.0 MiB =   1.4 MiB       udevd (3)

968.0 KiB + 548.0 KiB =   1.5 MiB       udisks-daemon (2)

  1.3 MiB + 339.0 KiB =   1.6 MiB       polkitd

  1.3 MiB + 328.0 KiB =   1.6 MiB       syslog-ng (2)

  1.4 MiB + 344.0 KiB =   1.7 MiB       console-kit-daemon

  1.5 MiB + 391.0 KiB =   1.9 MiB       upowerd

  1.8 MiB + 222.5 KiB =   2.0 MiB       cupsd

  1.9 MiB + 224.5 KiB =   2.1 MiB       akonadi_control

  2.0 MiB + 727.0 KiB =   2.7 MiB       bash (4)

  2.1 MiB + 824.0 KiB =   2.9 MiB       klauncher

  2.3 MiB + 776.0 KiB =   3.0 MiB       nepomukserver

  2.7 MiB + 355.0 KiB =   3.1 MiB       dbus-daemon (2)

  3.0 MiB + 718.5 KiB =   3.7 MiB       kio_http_cache_

  3.6 MiB + 394.5 KiB =   4.0 MiB       kuiserver

  3.8 MiB + 430.0 KiB =   4.2 MiB       nepomukcontroller

  3.8 MiB + 496.0 KiB =   4.2 MiB       kioexec

  4.0 MiB + 599.5 KiB =   4.6 MiB       polkit-kde-authentication-agent-1

  4.0 MiB + 576.0 KiB =   4.6 MiB       akonadi_maildir_resource

  4.1 MiB + 593.5 KiB =   4.6 MiB       akonadi_nepomuk_contact_feeder

  4.1 MiB + 582.0 KiB =   4.6 MiB       kwalletmanager

  4.2 MiB + 593.5 KiB =   4.8 MiB       akonadi_maildispatcher_agent

  4.2 MiB + 703.5 KiB =   4.9 MiB       akonadi_nepomuk_calendar_feeder

  4.7 MiB + 497.5 KiB =   5.2 MiB       kactivitymanagerd

  5.2 MiB + 348.5 KiB =   5.6 MiB       akonadiserver

  5.0 MiB + 774.0 KiB =   5.7 MiB       akonadi_kabc_resource

  4.9 MiB + 880.5 KiB =   5.8 MiB       kglobalaccel

  4.9 MiB + 940.0 KiB =   5.8 MiB       ksmserver

  5.0 MiB + 883.0 KiB =   5.8 MiB       kaccess

552.0 KiB +   5.4 MiB =   5.9 MiB       kdeinit4

  5.2 MiB + 964.0 KiB =   6.1 MiB       klipper

  5.2 MiB +   1.3 MiB =   6.5 MiB       kwalletd

  6.1 MiB + 958.0 KiB =   7.1 MiB       korgac

  6.7 MiB + 523.5 KiB =   7.2 MiB       wicd-monitor

  7.0 MiB +   1.4 MiB =   8.4 MiB       konsole

  6.9 MiB +   1.6 MiB =   8.6 MiB       kmix

  8.4 MiB + 257.0 KiB =   8.6 MiB       wicd

  8.0 MiB +   1.2 MiB =   9.2 MiB       akonadi_vcard_resource (2)

 12.7 MiB +   3.6 MiB =  16.3 MiB       kio_file (5)

 14.6 MiB +   2.2 MiB =  16.8 MiB       kded4

 14.7 MiB +   2.8 MiB =  17.5 MiB       krunner

 16.6 MiB +   2.8 MiB =  19.4 MiB       akonadi_ical_resource (4)

 20.9 MiB +   2.6 MiB =  23.5 MiB       knotify4

 24.8 MiB +   4.4 MiB =  29.2 MiB       wicd-client

 29.6 MiB + 121.0 KiB =  29.7 MiB       mysqld

 32.5 MiB +   3.7 MiB =  36.2 MiB       plasma-desktop

 41.1 MiB +   1.7 MiB =  42.8 MiB       Xorg

 38.0 MiB +   6.3 MiB =  44.2 MiB       kwin

 39.8 MiB +   6.9 MiB =  46.7 MiB       kio_http (8)

 47.9 MiB +   6.8 MiB =  54.8 MiB       akonadi_pop3_resource (12)

 60.1 MiB +  15.1 MiB =  75.2 MiB       python2.7 (4)

 96.3 MiB +   2.9 MiB =  99.3 MiB       soffice.bin

111.3 MiB +   3.0 MiB = 114.3 MiB       kontact

132.8 MiB + 507.0 KiB = 133.2 MiB       operapluginwrapper-ia32-linux

303.1 MiB +   1.5 MiB = 304.6 MiB       opera

---------------------------------

                          1.3 GiB

=================================

 Private  +   Shared  =  RAM used       Program 
```

----------

## SlashBeast

@Xywa: nope, nie pisze w pythonie, znalazlem ten skrypt lata temu i do dzisiaj uzywam.

Z tym uzyciem ramu to jest tak, ze pewnie pokazuje uzycie ramu razem z page cache, bufferami dysku. Domyslnie w Linuksie masz vm.swappiness ustawione na 60, jest to argument procentowy. Czyli jezeli aplikacje zajmuja ponad 1229M system stara sie wyswappowac 'nieuzywane' dane na dysk, by zrobic miejsce, te pozostale 819M na buffery dysku, czyli jezeli czytasz jakis plik z dysku, jest on w page cache, jak znowu go czytasz, odczyt jest natychmiastowy bo polecial z ramu. Nie jest to wcale takie zle. Oczywiscie te 60% zalezy od usecase. 

Ja przy 6G ramu daje vm.swappiness=34, daje mi to 2G ramu na te page caches z ktorych bardzo korzystam. Moze ustaw sobie vm.swappiness na 25 i sprawdz? System bedzie respowalny napewno bardzoej a jak Twoj usecase to typowy desktop pewnie te 512M da rade.

```
sysctl -w vm.swappiness=25

echo 'vm.swappiness=25' >> /etc/sysctl.conf
```

Mozesz tez uzyc drivera zram (chyba nadal w staging jest) I zrobic swap, ktory jest tak naprawde skompresowany w ramie.

Jak masz wiele rdzeni, warto zrobic kilka swap'ow na zramie z tym samym prio wtedy po rowno bedzie rozkladany swap.

Skrypt, ktory kiedys napisalem i uzywam do dzisiaj:

```
#!/bin/bash

set -e

### Config

# How many zram devices should be created, 

# Use more than one if you are on multicore system.

zram_num=4

# Size in megabytes

zram_size=128

###

modprobe zram num_devices="${zram_num}"

attempts=0

while true; do 

   if [ "${attempts}" -ge '5' ]; then

      echo "Something went wrong, no /dev/zram0 device!"

      exit 1

   fi

   if ! [ -b '/dev/zram0' ]; then

      attempts="$((attempts+1))"

      echo "Waiting for zram devices..."

      sleep 1

   else

      break

   fi

done

numdev=0

while [ "${numdev}" -lt "${zram_num}" ]; do

   echo "$((${zram_size}*1024*1024))" >> "/sys/block/zram${numdev}/disksize"

   mkswap "/dev/zram${numdev}"

   swapon -p 10 "/dev/zram${numdev}"

   numdev="$((numdev+1))"

done
```

zram koniecznie jako modul. Tutaj tworzy 4 urzadzenia po 128M, czyli 512M na lzo-kompressowalny swap. Najczesciej ratio jest 50-60% wiec zjada mi to jakies 256M ramu tak naprawde. Przy 2G i np. dualcore zrobil bym zram_num=2.

----------

## lazy_bum

Najpierw warto dowiedzieć się dlaczego Linux zjadł cały RAM. top można sobie wstawić w ramkę i powiesić na ścianie, a później użyć free.

```
maszyn ~ # sysctl -a | grep swap

vm.swappiness = 15

maszyn ~ # uptime

 22:41:12 up 10:13,  2 users,  load average: 0,06, 0,13, 0,89

maszyn ~ # free -m

             total       used       free     shared    buffers     cached

Mem:          4051       2389       1662          0         77       1573

-/+ buffers/cache:        737       3313

Swap:         4115          0       4115

```

----------

## Xywa

 *lazy_bum wrote:*   

> Najpierw warto dowiedzieć się dlaczego Linux zjadł cały RAM. top można sobie wstawić w ramkę i powiesić na ścianie, a później użyć free.

 

Włączona tylko Opera + Kmail i prawie 2G w plecy wg free -m:

```
$ free -m

             total       used       free     shared    buffers     cached

Mem:          2760       1891        868          0         84        656

-/+ buffers/cache:       1150       1609

Swap:         2957          0       2957

```

Czytam tego linka co zamieściłeś, tylko zastanawia mnie skoro pamieć idzie na cache, to dlaczego po jakimś czasie wykorzystywany jest już swap dysku twardego. System mógłby preferować unikanie swapa kosztem np. mniejszego cache'a.

p.s.

```
# sysctl -a | grep swap

error: "Invalid argument" reading key "fs.binfmt_misc.register"

vm.swappiness = 60

error: permission denied on key 'net.ipv4.route.flush'

error: permission denied on key 'net.ipv6.route.flush'
```

```
# uptime 

 11:07:38 up  1:52,  3 users,  load average: 0.30, 0.16, 0.15
```

----------

## SlashBeast

 *Xywa wrote:*   

> Czytam tego linka co zamieściłeś, tylko zastanawia mnie skoro pamieć idzie na cache, to dlaczego po jakimś czasie wykorzystywany jest już swap dysku twardego. System mógłby preferować unikanie swapa kosztem np. mniejszego cache'a.
> 
> 

 

Yhh, i napisalem Ci o tym, stoi za tym parametr vm.swappiness.

----------

## Xywa

 *SlashBeast wrote:*   

> Yhh, i napisalem Ci o tym, stoi za tym parametr vm.swappiness.

 

OK - już to widzę  :Smile: 

Znalazłem trochę na temat vm.swappiness:

Co zrobić aby system wykorzystywał więcej pamięci RAM, a mniej partycji SWAP?

http://newinubuntu.blogspot.co.uk/2012/03/co-zrobic-aby-system-wykorzystywa.html

Swapowanie w linuksie:

http://www.digipedia.pl/article/view/id/11/name/Swapowanie-w-linuksie

Czyli podsumowująć, załóżmy że mam 3GB pamięci. 1GB jest używane na działąjące programy, 1.5GB to stare programy w cache, gotowe do zadziałania od razu gdybym je uruchomił. Jak będzie działał mi system w przypadku zmiany parametru vm.swappiness z 60 (wartośc domyślna) na np. 20?

----------

