Перш ніж насправді запитати, просто щоб було зрозуміло: так, я знаю про кеш диска, і ні, це не моя справа :) Вибачте за цю преамбулу :)
Я використовую CentOS 5. Кожен додаток у системі сильно змінюється, а система дуже повільно. Коли я це роблю free -m
, ось що я отримав:
total used free shared buffers cached
Mem: 3952 3929 22 0 1 18
-/+ buffers/cache: 3909 42
Swap: 16383 46 16337
Отже, я фактично маю лише 42 Мб! Наскільки я розумію, -/+ buffers/cache
насправді кеш диска насправді не враховується, тому у мене справді лише 42 Мб, правда? Я подумав, що я можу помилятися, тому спробував вимкнути кешування диска, і це не мало ефекту - картинка залишилася колишньою.
Отже, я вирішив з’ясувати, хто використовує всю мою оперативну пам’ять, і я top
для цього використовував . Але, мабуть, це повідомляє, що жоден процес не використовує мою оперативну пам’ять. Єдиний процес у моїй вершині - MySQL, але він використовує 0,1% оперативної пам’яті та 400Mb свопу. Ця ж картина, коли я намагаюся запускати інші сервіси чи програми - всі йдуть свопом, top
показує, що MEM не використовується (максимум 0,1% для будь-якого процесу).
top - 15:09:00 up 2:09, 2 users, load average: 0.02, 0.16, 0.11
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4046868k total, 4001368k used, 45500k free, 748k buffers
Swap: 16777208k total, 68840k used, 16708368k free, 16632k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
3214 ntp 15 0 23412 5044 3916 S 0.0 0.1 0:00.00 17m ntpd
2319 root 5 -10 12648 4460 3184 S 0.0 0.1 0:00.00 8188 iscsid
2168 root RT 0 22120 3692 2848 S 0.0 0.1 0:00.00 17m multipathd
5113 mysql 18 0 474m 2356 856 S 0.0 0.1 0:00.11 472m mysqld
4106 root 34 19 251m 1944 1360 S 0.0 0.0 0:00.11 249m yum-updatesd
4109 root 15 0 90152 1904 1772 S 0.0 0.0 0:00.18 86m sshd
5175 root 15 0 90156 1896 1772 S 0.0 0.0 0:00.02 86m sshd
Перезапуск не допомагає, і, до речі, це дуже повільно, чого я зазвичай не очікував на цій машині (4 ядра, 4 Гб оперативної пам’яті, RAID1).
Отже, з цим - я майже впевнений, що це не дисковий кеш, який використовує оперативну пам’ять, тому що, як правило, це повинно було бути зменшено, а інші процеси дозволяють використовувати оперативну пам’ять, а не переходити до swap.
Отже, нарешті, питання - якщо хтось має якісь ідеї, як дізнатися, який процес насправді так активно використовує пам'ять?
irc.freenode.org
. Я створив тут чат для розширеного обговорення .
free -m
, але розмір його можна запитувати в Linux за допомогою cat /proc/spl/kstat/zfs/arcstats | grep data_size
.