Tips en Trucs 2016

Geheugengebruik controleren

Het geheugen van een systeem bepaalt in veel gevallen de prestaties van een Linux systeem. Linux heeft dan ook een pak hulpmiddelen om het geheugengebruik te analyseren. De verschillende hulpmiddelen verschillen door de aangeboden informatie (systeem, per proces, per gebruiker), weergave (grafisch, terminal, ncurses), enz.

/proc/meminfo

De eenvoudigste manier om het RAM gebruik te controleren is via /proc/meminfo. Dit virtueel bestand wordt constant aangepast en is de informatiebron van hulpmiddelen zoals free, top en ps. Het bevat informatie over beschikbaar/vrij fysiek geheugen, de grootte van de buffer die klaar staat om naar de schijf weggeschreven te worden, enz. Proces specifieke geheugeninformatie is beschikbaar via /proc//statm en /proc//status.

dany@laptop:~> cat /proc/meminfo
MemTotal:        8089288 kB
MemFree:         3778560 kB
MemAvailable:    7282956 kB
Buffers:          133408 kB
Cached:          3290368 kB
SwapCached:            0 kB
Active:          1832840 kB
Inactive:        2116084 kB
Active(anon):     528140 kB
Inactive(anon):   101540 kB
Active(file):    1304700 kB
Inactive(file):  2014544 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       8387580 kB
SwapFree:        8387580 kB
Dirty:               136 kB
Writeback:             0 kB
AnonPages:        525148 kB
Mapped:           274012 kB
Shmem:            104532 kB
Slab:             266680 kB
SReclaimable:     227488 kB
SUnreclaim:        39192 kB
KernelStack:        5408 kB
PageTables:        30996 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    12432224 kB
Committed_AS:    2331116 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      366556 kB
VmallocChunk:   34358947836 kB
HardwareCorrupted:     0 kB
AnonHugePages:    262144 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      149936 kB
DirectMap2M:     5007360 kB
DirectMap1G:     4194304 kB

free

De free opdracht is een snelle en eenvoudige manier om een overzicht te krijgen van het geheugengebruik op bais van /proc/meminfo. Het toont een momentopname van de totale/vrije geheugencapaciteit en swap geheugen van het systeem. Daarnaast wordt de gebruikte en vrije kernel bufferruimte weergegeven.

dany@laptop:~> free
             total       used       free     shared    buffers     cached
Mem:       8089288    4313036    3776252     104532     133624    3518068
-/+ buffers/cache:     661344    7427944
Swap:      8387580          0    8387580

KDE Systemmonitor

Gnome heeft de Gnome Systeemmonitor en KDE de KDE Systeemmonitor. Beiden tonen real time een tijdlijn met de Systeembelasting en een Processen met per proces de CPU en geheugenbelasting.

KDE systeemmonitor

ps

De ps opdracht kan per proces het geheugengebruik weergeven. De geheugeninformatie bevat %MEM (procentueel gebruik van totale fysieke geheugen), VSZ (hoeveelheid gebruikt virtueel geheugen) en RSS (hoeveelheid gebruikt fysiek geheugen). Je kunt de gegevens sorteren met de --sort optie. Het volgende voorbeeld sorteert op dalend RSS:

dany@laptop:~> ps aux --sort -rss
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
dany      1759  0.1  2.8 5241296 232808 ?      Sl   14:33   0:29 /usr/bin/plasmashell --shut-up
dany      1747  0.0  1.7 6784600 141196 ?      Sl   14:33   0:03 /usr/bin/krunner
mysql     1112  0.0  1.2 981020 98740 ?        Ssl  14:33   0:16 /usr/sbin/mysqld --defaults-file=/etc/my.cnf --user=mysql
dany      1745  0.3  1.1 3036104 95728 ?       Sl   14:33   1:10 kwin_x11 -session 1018f16a16215a000144672971100000014460002_14564302
dany      1707  0.0  0.7 1428580 60356 ?       Sl   14:33   0:03 kded5 [kdeinit5]
dany      1731  0.0  0.6 1234324 49888 ?       Sl   14:33   0:00 /usr/bin/ksmserver
dany      5177  0.0  0.5 1168556 45384 ?       Sl   15:35   0:00 /usr/bin/knotify4
root      1449  0.7  0.5 272960 45104 tty7     Ssl+ 14:33   2:30 /usr/bin/X -nolisten tcp -auth /run/sddm/{2726bee3-364a-437f-9717-80
root      6752  0.0  0.5 819772 40528 ?        Sl   16:34   0:00 /usr/bin/kactivitymanagerd start-daemon
dany      1733  0.0  0.4 819956 38176 ?        Sl   14:33   0:01 /usr/bin/kactivitymanagerd start-daemon
dany      1766  0.0  0.4 520340 35508 ?        Sl   14:33   0:00 /usr/lib64/libexec/polkit-kde-authentication-agent-1
dany      1742  0.0  0.4 435020 35036 ?        Sl   14:33   0:00 /usr/bin/kglobalaccel5
root       402  0.0  0.4 100716 34792 ?        Ss   14:33   0:00 /usr/lib/systemd/systemd-journald
dany      1770  0.0  0.3 427552 31656 ?        Sl   14:33   0:00 /usr/bin/xembedsniproxy
root      6625  0.0  0.3 428852 30680 ?        Sl   16:32   0:00 klauncher [kdeinit5] --fd=8
dany      1705  0.0  0.3 456500 30612 ?        Sl   14:33   0:00 klauncher [kdeinit5] --fd=9
dany      1918  0.0  0.3 280176 29864 ?        S    14:33   0:00 kdeinit4: kded4 [kdeinit]
dany      1734  0.0  0.3 443160 29748 ?        Sl   14:33   0:00 /usr/bin/kaccess
root      7065  0.0  0.3 301604 29644 ?        Ss   16:50   0:00 /usr/sbin/httpd-prefork -f /etc/apache2/httpd.conf -DSYSCONFIG -C Pi
dany      1976  0.0  0.3 275396 29336 ?        S    14:33   0:00 /usr/bin/kuiserver
dany      1704  0.0  0.2 305476 23416 ?        Ss   14:33   0:00 kdeinit5: Running...
dany      1746  0.0  0.2 5498208 20256 ?       SN   14:33   0:00 /usr/bin/baloo_file
polkitd    917  0.0  0.2 519756 19364 ?        Ssl  14:33   0:00 /usr/lib/polkit-1/polkitd --no-debug
wwwrun    7072  0.0  0.2 301808 17772 ?        S    16:50   0:00 /usr/sbin/httpd-prefork -f /etc/apache2/httpd.conf -DSYSCONFIG -C Pi
dany      1912  0.0  0.2 187608 17372 ?        S    14:33   0:00 kdeinit4: klauncher [kdeinit] --fd=8
wwwrun    7071  0.0  0.2 301808 16904 ?        S    16:50   0:00 /usr/sbin/httpd-prefork -f /etc/apache2/httpd.conf -DSYSCONFIG -C Pi
dany      1910  0.0  0.2 167928 16324 ?        Ss   14:33   0:00 kdeinit4: kdeinit4 Running...
dany      1792  0.0  0.1 266508 15996 ?        Sl   14:33   0:00 /usr/lib64/libexec/kf5/kscreen_backend_launcher
root      1407  0.0  0.1 104532 14136 ?        S    14:33   0:00 /usr/bin/sddm
root       919  0.0  0.1 330272 14100 ?        Ssl  14:33   0:00 /usr/sbin/NetworkManager --no-daemon
root      1977  0.0  0.1 257064 14064 ?        Ss   14:33   0:00 /usr/sbin/smbd -D
root      1569  0.0  0.1 137828 13224 ?        S    14:33   0:00 /usr/lib/sddm/sddm-helper --socket /tmp/sddm-authcef6576c-1d49-4e2c-
...

top

De top opdracht toont real time een overzicht van de processen met hun eigen specifieke systeembelasting. De geheugen gerelateerde informatie bestaat uit %MEM (geheugengebruik in procent), VIRT (virtueel geheugengebruik), SWAP (virtueel geheugen op de schijf), CODE (fysiek geheugen voor het uitvoeren van code), DATA (fysiek geheugen voor gegevens), RES (fysiek geheugen: CODE + DATA) en SHR (geheugen gedeeld met andere processen). Daarenboven kan je de proceslijst sorteren op geheugengrootte. De top opdracht breek je af met Ctrl+c.

top - 20:22:08 up  5:48,  2 users,  load average: 0,00, 0,01, 0,07
Tasks: 214 total,   1 running, 213 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0,1 us,  0,0 sy,  0,0 ni, 99,9 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem:   8089288 total,  4319636 used,  3769652 free,   136964 buffers
KiB Swap:  8387580 total,        0 used,  8387580 free.  3531608 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                         
 1091 ntp       20   0   97736   4788   4192 S 0,332 0,059   0:01.65 ntpd                                                            
 8681 dany      20   0   15364   2752   2192 R 0,332 0,034   0:01.36 top                                                             
    1 root      20   0  181076   5776   3384 S 0,000 0,071   0:03.48 systemd                                                         
    2 root      20   0       0      0      0 S 0,000 0,000   0:00.00 kthreadd                                                        
    3 root      20   0       0      0      0 S 0,000 0,000   0:00.22 ksoftirqd/0                                                     

vmstat

De vmstat opdracht toont actuele en gemiddelde waarden van verschillende systeemactiviteiten waaronder CPU, geheugen, interrupts en schijfactiviteit. De geheugeninformatie bevat het fysiek gebruikt geheugen (total/used memory en buffer/cache memory) en virtueel gebruikt geheugen (memory paged in/out, swapped in/out).

dany@laptop:~> vmstat -s
      8089288 K total memory
      4319252 K used memory
      1838952 K active memory
      2116720 K inactive memory
      3770036 K free memory
       136988 K buffer memory
      3531648 K swap cache
      8387580 K total swap
            0 K used swap
      8387580 K free swap
        76705 non-nice user cpu ticks
         1284 nice user cpu ticks
        65728 system cpu ticks
      8240392 idle cpu ticks
         4991 IO-wait cpu ticks
            2 IRQ cpu ticks
          293 softirq cpu ticks
            0 stolen cpu ticks
      3721497 pages paged in
      2052532 pages paged out
            0 pages swapped in
            0 pages swapped out
      5973290 interrupts
     19882540 CPU context switches
   1456493624 boot time
         8746 forks