LINUX.ORG.RU
ФорумAdmin

Кто использует память

 ,


0

2

На сервере 15 гигов памяти

free -m
              total        used        free      shared  buff/cache   available
Mem:          15995       10377         437          21        5179        5293
Swap:          1048         450         598


ТОП показывает mysql VIRT=8G RES=1.7G

Останавливаю mysql, php-fpm
free -m
              total        used        free      shared  buff/cache   available
Mem:          15995        8633        1954          24        5407        7017
Swap:          1048         402         646


... и все равно кто-то использует 8 гигов памяти
Смотрю в ТОП - там ничего подозрительного. Как вычислить кто память жрет? И почему у mysql VIRT=8G, если в настройках innodb_buffer_pool_size=3G?

★★★

Ответ на: комментарий от jtad

Интересный скрипт. У меня так:

# python ps_mem.py
 Private  +   Shared  =  RAM used	Program

  8.0 KiB +  25.5 KiB =  33.5 KiB	acpid
 92.0 KiB +  28.0 KiB = 120.0 KiB	init
 96.0 KiB +  52.0 KiB = 148.0 KiB	hald-runner
124.0 KiB +  26.5 KiB = 150.5 KiB	audispd
156.0 KiB +  25.5 KiB = 181.5 KiB	irqbalance
168.0 KiB +  29.0 KiB = 197.0 KiB	gnome-pty-helper
168.0 KiB +  36.0 KiB = 204.0 KiB	auditd
156.0 KiB +  67.5 KiB = 223.5 KiB	hald-addon-input
224.0 KiB +  29.5 KiB = 253.5 KiB	cron
272.0 KiB +  38.5 KiB = 310.5 KiB	rpcbind
224.0 KiB + 100.0 KiB = 324.0 KiB	udevd (3)
332.0 KiB +  13.5 KiB = 345.5 KiB	klogd
332.0 KiB +  51.0 KiB = 383.0 KiB	hald-addon-acpi
420.0 KiB +  23.0 KiB = 443.0 KiB	ssh-agent
292.0 KiB + 160.5 KiB = 452.5 KiB	HWActivator
396.0 KiB +  65.5 KiB = 461.5 KiB	hald-addon-cpufreq
428.0 KiB +  38.0 KiB = 466.0 KiB	compiz-manager
416.0 KiB +  66.5 KiB = 482.5 KiB	hald-addon-storage
372.0 KiB + 153.5 KiB = 525.5 KiB	console-kit-daemon
464.0 KiB +  89.5 KiB = 553.5 KiB	gvfsd-burn
512.0 KiB +  95.5 KiB = 607.5 KiB	gvfsd
548.0 KiB + 105.0 KiB = 653.0 KiB	login
568.0 KiB +  90.5 KiB = 658.5 KiB	su
572.0 KiB +  87.5 KiB = 659.5 KiB	qmgr
608.0 KiB +  55.5 KiB = 663.5 KiB	sshd
580.0 KiB +  90.0 KiB = 670.0 KiB	master
656.0 KiB + 104.0 KiB = 760.0 KiB	modem-manager
648.0 KiB + 130.5 KiB = 778.5 KiB	pickup
700.0 KiB +  83.0 KiB = 783.0 KiB	dbus-launch (2)
688.0 KiB + 111.5 KiB = 799.5 KiB	nscd
736.0 KiB +  76.0 KiB = 812.0 KiB	wpa_supplicant
556.0 KiB + 275.0 KiB = 831.0 KiB	kdm (2)
756.0 KiB + 116.0 KiB = 872.0 KiB	gvfsd-trash
872.0 KiB +  33.5 KiB = 905.5 KiB	smartd
916.0 KiB +  42.5 KiB = 958.5 KiB	privoxy
804.0 KiB + 164.0 KiB = 968.0 KiB	gconf-helper
880.0 KiB + 127.5 KiB =   1.0 MiB	mingetty (5)
  1.0 MiB +  36.5 KiB =   1.0 MiB	PanasonicMFSpushd
896.0 KiB + 157.0 KiB =   1.0 MiB	gnome-keyring-daemon
920.0 KiB + 175.5 KiB =   1.1 MiB	nm-system-settings
  1.1 MiB +  44.0 KiB =   1.1 MiB	syslog-ng
  1.1 MiB +  74.5 KiB =   1.2 MiB	hald
  1.1 MiB + 120.5 KiB =   1.2 MiB	gvfs-hal-volume-monitor
  1.1 MiB + 104.5 KiB =   1.3 MiB	gvfs-gphoto2-volume-monitor
  1.2 MiB + 102.5 KiB =   1.3 MiB	cupsd
  1.2 MiB + 158.5 KiB =   1.4 MiB	bonobo-activation-server
  1.3 MiB + 148.5 KiB =   1.4 MiB	NetworkManager
  1.4 MiB +  83.0 KiB =   1.5 MiB	gvfsd-metadata
772.0 KiB + 948.5 KiB =   1.7 MiB	nmbd (2)
  1.5 MiB + 300.5 KiB =   1.8 MiB	dbus-daemon (3)
  1.8 MiB + 121.5 KiB =   2.0 MiB	VBoxXPCOMIPCD
868.0 KiB +   1.3 MiB =   2.1 MiB	smbd (2)
  1.9 MiB + 224.5 KiB =   2.1 MiB	gnome-screensaver
  2.1 MiB + 118.0 KiB =   2.2 MiB	VBoxNetDHCP
  2.6 MiB +  29.0 KiB =   2.6 MiB	dhclient
  2.4 MiB + 343.5 KiB =   2.7 MiB	gnome-session
  3.1 MiB +  21.5 KiB =   3.1 MiB	hddtemp
  3.7 MiB + 358.5 KiB =   4.0 MiB	VBoxSVC
  3.8 MiB + 520.0 KiB =   4.3 MiB	gnome-settings-daemon
  4.3 MiB +  18.5 KiB =   4.3 MiB	haveged
  3.5 MiB + 879.5 KiB =   4.4 MiB	pulseaudio
  5.3 MiB + 112.5 KiB =   5.4 MiB	gconfd-2
  5.9 MiB + 389.0 KiB =   6.3 MiB	seahorse-agent
  6.2 MiB + 384.5 KiB =   6.6 MiB	bluetooth-applet
  6.5 MiB + 437.0 KiB =   6.9 MiB	seahorse-daemon
  7.1 MiB + 648.5 KiB =   7.7 MiB	gnome-volume-control-applet
  7.6 MiB + 673.5 KiB =   8.3 MiB	bash (4)
  7.7 MiB + 971.5 KiB =   8.7 MiB	esets_gui
  8.1 MiB + 618.5 KiB =   8.7 MiB	emerald
  8.7 MiB + 689.5 KiB =   9.3 MiB	gxneur
  8.5 MiB +   1.0 MiB =   9.5 MiB	gnome-terminal
  9.0 MiB + 597.5 KiB =   9.5 MiB	gnome-power-manager
  9.7 MiB + 698.0 KiB =  10.4 MiB	notification-daemon
 10.9 MiB + 542.5 KiB =  11.5 MiB	python2.6
 10.9 MiB + 754.5 KiB =  11.6 MiB	nm-applet
 14.8 MiB + 926.5 KiB =  15.7 MiB	florence
 15.0 MiB +   1.3 MiB =  16.3 MiB	gnome-panel
 17.3 MiB +   1.3 MiB =  18.6 MiB	nautilus
 19.0 MiB +   1.2 MiB =  20.2 MiB	pidgin
 22.8 MiB + 773.0 KiB =  23.6 MiB	compiz
 24.4 MiB +  81.5 KiB =  24.4 MiB	tor
 73.6 MiB +  13.5 MiB =  87.1 MiB	Xorg
277.2 MiB + 600.5 KiB = 277.8 MiB	esets_daemon (2)
490.7 MiB +  13.3 MiB = 503.9 MiB	firefox
  1.5 GiB +   1.7 MiB =   1.5 GiB	VirtualBox
---------------------------------
                          2.7 GiB
=================================
ZenitharChampion ★★★★★ ()

И почему у mysql VIRT=8G, если в настройках innodb_buffer_pool_size=3G?

Потому что VIRT это то, сколько памяти процесс в теории может себе забрать в настоящий момент.

chaos_dremel ★★ ()
Ответ на: комментарий от gobot

Ну как резервируется. Сумма VIRT всех процессов легко может быть больше оперативки и свопа (раньше по дефолту была не более двух объёмов оперативки + своп, потом дефолт поменяли и сняли ограничение). Так что это чисто номинальная цифра. И большие её значения это норма и точно не проблема.

chaos_dremel ★★ ()
Ответ на: комментарий от jtad
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +  19.5 KiB =  23.5 KiB       agetty
  8.0 KiB +  19.5 KiB =  27.5 KiB       dhclient
 12.0 KiB +  21.5 KiB =  33.5 KiB       exim4
 40.0 KiB +  17.5 KiB =  57.5 KiB       atopacctd
 48.0 KiB +  19.5 KiB =  67.5 KiB       named
112.0 KiB +  14.5 KiB = 126.5 KiB       sh
152.0 KiB +  21.5 KiB = 173.5 KiB       systemd-udevd
172.0 KiB +  68.5 KiB = 240.5 KiB       ntpd (3)
168.0 KiB + 199.0 KiB = 367.0 KiB       cron (2)
652.0 KiB +  21.5 KiB = 673.5 KiB       proftpd
700.0 KiB +  26.5 KiB = 726.5 KiB       rsyslogd
520.0 KiB + 395.5 KiB = 915.5 KiB       systemd-logind
896.0 KiB +  54.5 KiB = 950.5 KiB       dbus-daemon
  1.1 MiB + 214.5 KiB =   1.3 MiB       sudo
  1.2 MiB + 607.0 KiB =   1.8 MiB       zabbix_agentd (6)
  1.7 MiB + 297.5 KiB =   2.0 MiB       supervisord
  2.5 MiB + 120.5 KiB =   2.6 MiB       bash
  2.2 MiB + 408.5 KiB =   2.6 MiB       systemd (3)
  2.4 MiB + 313.5 KiB =   2.8 MiB       systemd-journald
  3.7 MiB + 101.5 KiB =   3.8 MiB       node
  1.0 MiB +   3.7 MiB =   4.8 MiB       sshd (5)
  3.9 MiB +   1.6 MiB =   5.5 MiB       nginx (6)
  8.8 MiB +  51.5 KiB =   8.8 MiB       fail2ban-server
 15.1 MiB + 249.5 KiB =  15.3 MiB       atop
 40.9 MiB +  22.4 MiB =  63.3 MiB       php-fpm5.6 (6)
188.3 MiB +  17.6 MiB = 205.9 MiB       php5.6 (31)
487.3 MiB +  12.0 MiB = 499.3 MiB       ffmpeg (21)
  1.6 GiB + 166.5 KiB =   1.6 GiB       mysqld
---------------------------------
                          2.4 GiB
=================================



Что это значит? HTOP говорит, что используется 10 гигов

gobot ★★★ ()
Ответ на: комментарий от chaos_dremel

Ок, если VIRT ни на что не влияет, то почему HTOP показывает всегда что 10G памяти используется, вне зависимости запущены ли демоны основные или нет? Вообще из-за чего все это вот Out of memory (комментарий) Падает почти каждый час mysql (oo-killer его убивает)

MemTotal:       16379500 kB
MemFree:          164344 kB
MemAvailable:    5288096 kB
Buffers:            3200 kB
Cached:           265572 kB
SwapCached:         6820 kB
Active:          1714424 kB
Inactive:         936352 kB
Active(anon):    1628488 kB
Inactive(anon):   781372 kB
Active(file):      85936 kB
Inactive(file):   154980 kB
Unevictable:       20892 kB
Mlocked:           20892 kB
SwapTotal:       1074172 kB
SwapFree:             64 kB
Dirty:              5232 kB
Writeback:             0 kB
AnonPages:       2398856 kB
Mapped:            54884 kB
Shmem:             23056 kB
Slab:            6921644 kB
SReclaimable:    5206768 kB
SUnreclaim:      1714876 kB
KernelStack:        5044 kB
PageTables:        16844 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9263920 kB
Committed_AS:    9404888 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:          6491904 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:    13025484 kB
DirectMap2M:     3717120 kB

gobot ★★★ ()

Подсчитал сколько реально использует памяти сервер(VmRSS) по процессам

for file in /proc/*/status ; do awk '/VmRSS|Name|^Pid/{printf $2 " " $3}END{ print ""}' $file; done | awk '{ sum+=int($3)}END{print sum}'

Выходит ~2 370 408 kb, то есть 2 гига.
Но
free -m
              total        used        free      shared  buff/cache   available
Mem:          15995       10426         143          15        5426        5232
Swap:          1048         900         148

упорно показывает что used=10426, то есть 10гигов...
Ничего не понимаю!

gobot ★★★ ()

Полез в исходники free, эта утилита использует meminfo() для вывода used, которая та в свою очередь расчитывает mem_used по формуле
https://gitlab.com/procps-ng/procps/-/blob/master/proc/sysinfo.c

mem_used = kb_main_total - kb_main_free - kb_main_cached - kb_main_buffers

или понятиями /proc/meminfo

used = MemTotal -  MemFree -  (Cached + SReclaimable) - Buffers


В моем случае
used = 16379500 - 159828 - (463804 + 5204400) - 12108 =  10539360 = 10GB

Посмотрел на других серверах(тоже дебиан), там MemFree почти 50% MemTotal, очень маленький SReclaimable около 1mb и на одном cached 10Gb(думаю из-за mysql RSS = 15GB)
В связи с этим назревает вопрос, отчего такой малый MemFree, Cached и огромный SReclaimable ?

cat /proc/meminfo
MemTotal:       16379500 kB
MemFree:          147552 kB
MemAvailable:    5518616 kB
Buffers:           10260 kB
Cached:           507872 kB
SwapCached:         8256 kB
Active:          1664720 kB
Inactive:        1006388 kB
Active(anon):    1614668 kB
Inactive(anon):   563188 kB
Active(file):      50052 kB
Inactive(file):   443200 kB
Unevictable:       17156 kB
Mlocked:           17156 kB
SwapTotal:       1074172 kB
SwapFree:         555908 kB
Dirty:             20984 kB
Writeback:             0 kB
AnonPages:       2164256 kB
Mapped:            66916 kB
Shmem:             20684 kB
Slab:            6914304 kB
SReclaimable:    5201740 kB
SUnreclaim:      1712564 kB
KernelStack:        5248 kB
PageTables:        17704 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9263920 kB
Committed_AS:    9449496 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:          6497280 kB
HardwareCorrupted:     0 kB
AnonHugePages:     14336 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:    13035724 kB
DirectMap2M:     3706880 kB

gobot ★★★ ()

Путем метода тыка понял, что система не выделяет память, если она выходит за границы 10Гб.
Для теста использовал скрипт, который запрашивает память

#!/usr/bin/env python

import sys
import time

if len(sys.argv) != 2:
    print "usage: fillmem <number-of-megabytes>"
    sys.exit()

count = int(sys.argv[1])

megabyte = (0,) * (1024 * 1024 / 8)

data = megabyte * count

while True:
    time.sleep(1)

Когда на сервере используется 9Гб памяти, я запускаю mem.py 2000 и его прихлопывает сразу же oo-killer, т.к. выходит за границы 10Гб, если запускаю mem.py 1000, то нормально(чуть в своп попадает), т.к. в целом в системе используется меньше 10Гб.

Почему система не выделяет приложениям память, если суммарно используется > 10Gb?
free -h -l

              total        used        free      shared  buff/cache   available
Mem:           15Gi       9.9Gi       344Mi        20Mi       5.4Gi       5.4Gi
Low:           15Gi        15Gi       344Mi
High:            0B          0B          0B
Swap:         1.0Gi       1.0Gi        10Mi




available = 5.4Gi, но для кого она доступна, для ядра что ли?

gobot ★★★ ()
Ответ на: комментарий от gremlin_the_red

Там почти все 95-100%

 Active / Total Objects (% used)    : 2136987 / 2189137 (97.6%)
 Active / Total Slabs (% used)      : 52896 / 52896 (100.0%)
 Active / Total Caches (% used)     : 92 / 123 (74.8%)
 Active / Total Size (% used)       : 386015.23K / 402333.97K (95.9%)
 Minimum / Average / Maximum Object : 0.01K / 0.18K / 23.25K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
1455519 1445705  99%    0.10K  37321       39    149284K buffer_head
134232 130828  97%    0.57K   2397       56     76704K radix_tree_node
 66495  64748  97%    0.20K   1705       39     13640K vm_area_struct
 63168  62196  98%    0.06K    987       64      3948K anon_vma_chain
 57456  48266  84%    0.19K   1368       42     10944K dentry
 42136  41189  97%    0.09K    916       46      3664K anon_vma
 33330  25489  76%    1.05K   1111       30     35552K ext4_inode_cache
 30144  26849  89%    0.25K    942       32      7536K filp
 29848  29848 100%    0.14K    533       56      4264K ext4_groupinfo_4k
 27904  27904 100%    0.03K    218      128       872K kmalloc-32
 25500  25500 100%    0.13K    425       60      3400K kernfs_node_cache
 20304  19633  96%    0.59K    376       54     12032K inode_cache
 19584   8694  44%    0.04K    192      102       768K ext4_extent_status
 17216  16270  94%    0.06K    269       64      1076K kmalloc-64
 16384  16384 100%    0.01K     32      512       128K kmalloc-8
 11776  11776 100%    0.02K     46      256       184K kmalloc-16
 10944  10370  94%    0.66K    228       48      7296K proc_inode_cache
 10560  10560 100%    0.50K    330       32      5280K kmalloc-512
  8106   8106 100%    0.19K    193       42      1544K cred_jar
  6342   6342 100%    0.19K    151       42      1208K kmalloc-192
  5888   5888 100%    0.69K    128       46      4096K sock_inode_cache
  5670   4772  84%    0.09K    135       42       540K kmalloc-96
  4998   4998 100%    0.04K     49      102       196K pde_opener
  4992   4961  99%    0.12K    156       32       624K pid
  4784   4784 100%    0.69K    104       46      3328K files_cache
  4608   4447  96%    1.00K    144       32      4608K kmalloc-1024
  4608   4608 100%    0.06K     72       64       288K dmaengine-unmap-2
  4320   4320 100%    0.25K    135       32      1080K skbuff_head_cache
  3648   3648 100%    1.00K    114       32      3648K UNIX
  3570   3570 100%    0.05K     42       85       168K ftrace_event_field
  3570   3570 100%    1.06K    119       30      3808K signal_cache
  3360   3360 100%    1.06K    112       30      3584K mm_struct
  3264   2741  83%    0.12K    102       32       408K kmalloc-128
  2760   2597  94%    0.69K     60       46      1920K shmem_inode_cache
  2688   2688 100%    0.06K     42       64       168K kmem_cache_node
  2652   2652 100%    0.04K     26      102       104K Acpi-Namespace
  2628   2628 100%    0.05K     36       73       144K Acpi-Parse
  2562   2562 100%    0.38K     61       42       976K kmem_cache
  2336   2336 100%    0.05K     32       73       128K mbcache
  1960   1960 100%    0.07K     35       56       140K eventpoll_pwq
  1836   1836 100%    0.12K     54       34       216K jbd2_journal_head
  1830   1830 100%    2.06K    122       15      3904K sighand_cache
  1736   1692  97%    3.69K    217        8      6944K task_struct
  1568   1568 100%    0.12K     49       32       196K scsi_sense_cache
  1472   1472 100%    0.25K     46       32       368K pool_workqueue
  1426   1426 100%    0.09K     31       46       124K trace_event_file
  1312   1312 100%    2.00K     82       16      2624K kmalloc-2048
  1300   1300 100%    1.25K     52       25      1664K UDPv6


gobot ★★★ ()
Ответ на: комментарий от gobot

Active / Total Size (% used) : 386015.23K / 402333.97K (95.9%)

Но в meminfo выше приведено

Slab: 6914304 kB

С сервером что-то делалось между этими моментами? Надо смотреть значения в slabtop в тот момент, когда на слабы уже гиги ушло.

gremlin_the_red ★★ ()
Ответ на: комментарий от NeOlip

Кэш, буфер не входит в используюмую память в понятиях top, free etc...

used = MemTotal - MemFree - (Cached + SReclaimable) - Buffers

То есть ядро должно освободить кэш, бкфер, если прога запрашивает память и ее нет

gobot ★★★ ()
Последнее исправление: gobot (всего исправлений: 2)