3

У меня есть игрушечный Linux-ящик с 256 Мб оперативной памяти под управлением Ubuntu 10.04.1 LTS. Вот вывод free -m:

             total       used       free     shared    buffers     cached
Mem:           245        122        122          0         19         64
-/+ buffers/cache:         38        206
Swap:          511          0        511

Если я не читаю это неправильно, используется 122 МБ, и только 84 МБ это дисковый кеш. Вот все процессы, которые я запускаю, отсортированные по использованию памяти (ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r):

%MEM %CPU   RSS    VSZ COMMAND
 5.0  0.0 12648 633140 node /home/node/main/sites.js
 1.5  0.0  3884 251736 /usr/sbin/console-kit-daemon --no-daemon
 1.3  0.0  3328  77108 sshd: apeace [priv]
 0.9  0.0  2344  19624 -bash
 0.7  0.0  1776  23620 /sbin/init
 0.6  0.0  1624  77108 sshd: apeace@pts/0
 0.6  0.0  1544   9940 redis-server /etc/redis/redis.conf
 0.6  0.0  1524  25848 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 103:105
 0.5  0.0  1324 119880 rsyslogd -c4
 0.4  0.0  1084  49308 /usr/sbin/sshd
 0.4  0.0  1028  44376 /usr/sbin/exim4 -bd -q30m
 0.3  0.0   904   6876 ps -eo pmem,pcpu,rss,vsize,args
 0.3  0.0   888  21124 cron
 0.3  0.0   868  23472 dbus-daemon --system --fork
 0.2  0.0   732  19624 -bash
 0.2  0.0   628   6128 /sbin/getty -8 38400 tty1
 0.2  0.0   628  16952 upstart-udev-bridge --daemon
 0.2  0.0   564  16800 udevd --daemon
 0.2  0.0   552  16796 udevd --daemon
 0.2  0.0   548  16796 udevd --daemon
 0.0  0.0     0      0 [xenwatch]
 0.0  0.0     0      0 [xenbus]
 0.0  0.0     0      0 [sync_supers]
 0.0  0.0     0      0 [netns]
 0.0  0.0     0      0 [migration/3]
 0.0  0.0     0      0 [migration/2]
 0.0  0.0     0      0 [migration/1]
 0.0  0.0     0      0 [migration/0]
 0.0  0.0     0      0 [kthreadd]
 0.0  0.0     0      0 [kswapd0]
 0.0  0.0     0      0 [kstriped]
 0.0  0.0     0      0 [ksoftirqd/3]
 0.0  0.0     0      0 [ksoftirqd/2]
 0.0  0.0     0      0 [ksoftirqd/1]
 0.0  0.0     0      0 [ksoftirqd/0]
 0.0  0.0     0      0 [ksnapd]
 0.0  0.0     0      0 [kseriod]
 0.0  0.0     0      0 [kjournald]
 0.0  0.0     0      0 [khvcd]
 0.0  0.0     0      0 [khelper]
 0.0  0.0     0      0 [kblockd/3]
 0.0  0.0     0      0 [kblockd/2]
 0.0  0.0     0      0 [kblockd/1]
 0.0  0.0     0      0 [kblockd/0]
 0.0  0.0     0      0 [flush-202:1]
 0.0  0.0     0      0 [events/3]
 0.0  0.0     0      0 [events/2]
 0.0  0.0     0      0 [events/1]
 0.0  0.0     0      0 [events/0]
 0.0  0.0     0      0 [crypto/3]
 0.0  0.0     0      0 [crypto/2]
 0.0  0.0     0      0 [crypto/1]
 0.0  0.0     0      0 [crypto/0]
 0.0  0.0     0      0 [cpuset]
 0.0  0.0     0      0 [bdi-default]
 0.0  0.0     0      0 [async/mgr]
 0.0  0.0     0      0 [aio/3]
 0.0  0.0     0      0 [aio/2]
 0.0  0.0     0      0 [aio/1]
 0.0  0.0     0      0 [aio/0]

Теперь я знаю, что ps - не лучший инструмент для просмотра использования памяти процесса, но это потому, что он сообщает о большем объеме памяти, чем фактически используется ... то есть независимо от того, как вы на это смотрите, все мои процессы не должны использовать около 122мб, даже если учесть дисковый кеш.

Более того, использование памяти постоянно растет. Мне приходилось перезагружать мой сервер раз в неделю, потому что, как только мои 256 МБ заполняются, он начинает меняться, что не будет сделано только для дискового кэша. Не должно ли быть каким-то образом для меня, чтобы увидеть виновника ?!

Я новичок в администрировании сервера, поэтому, если есть что-то очевидное, я упускаю это из виду.

Просто для примера : вывод cat /proc/meminfo :

MemTotal:         251140 kB
MemFree:          124604 kB
Buffers:           20536 kB
Cached:            66136 kB
SwapCached:            0 kB
Active:            65004 kB
Inactive:          37576 kB
Active(anon):      15932 kB
Inactive(anon):      164 kB
Active(file):      49072 kB
Inactive(file):    37412 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:        524284 kB
SwapFree:         524284 kB
Dirty:                 8 kB
Writeback:             0 kB
AnonPages:         15916 kB
Mapped:            10668 kB
Shmem:               188 kB
Slab:              18604 kB
SReclaimable:      10088 kB
SUnreclaim:         8516 kB
KernelStack:         536 kB
PageTables:         1444 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      649852 kB
Committed_AS:      64224 kB
VmallocTotal:   34359738367 kB
VmallocUsed:         752 kB
VmallocChunk:   34359737600 kB
DirectMap4k:      262144 kB
DirectMap2M:           0 kB

РЕДАКТИРОВАТЬ: я сначала неправильно понял значение free -m . Но даже в этом случае важно то, что моя ОС в конечном итоге начнет использовать память подкачки, если я не перезапущу свой сервер, чего не могло бы сделать кэширование на диске. Итак, где я могу посмотреть, что использует всю эту память?

3 ответа3

3

Как все остальные объяснили, ничто не использует много оперативной памяти прямо сейчас. Попробуйте запустить эту команду ps когда у вас действительно возникают проблемы.

Скорее всего, Node.js, Redis или какой-либо другой сервис настроен не очень хорошо и со временем использует больше оперативной памяти, когда вы получаете больше трафика, или внезапно использует слишком много оперативной памяти, когда вы получаете Slashdotted. Но нельзя сказать , что именно пойдет не так поздно , когда ничего не происходит не так в настоящее время.

2

Реальная проблема заключается в необходимости перезагрузки из-за большого файла подкачки, верно?

Насколько я знаю, когда ядру не хватает памяти, у него есть два варианта:

  1. Поменять
  2. Съешьте часть «кеша» (который, конечно, копил в надежде, что кешированные данные будут запрошены снова)

Вы пытались повлиять на этот выбор, играя с подменой?

Установка на что-то низкое (20?) может помочь вам улучшить вещи. По умолчанию установлено значение 60 (что имеет тенденцию к предпочтению обмена).

Опять же, вы администратор, а я обычный пользователь, и, возможно, вы уже пробовали это.

1

Ничего страшного, чтобы увидеть меньше свободного места для памяти, так как часть из них используется для буфера / кэша. В вашем свопе есть все свободное место. Поэтому я надеюсь, что вы все еще не имеете никакого влияния из-за нехватки памяти.

Исходя из буфера / кэша, 206M можно бесплатно использовать для приложений.

Вы также можете получить приближение от

cat /proc /[идентификатор процесса] /maps

(или же)

pmap [идентификатор процесса]

pmap -x [идентификатор процесса]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .