Назад | Перейти на главную страницу

Освобождение памяти (RAM) на сервере Ubuntu 8.04

Я запускаю Ubuntu 8.04 на виртуальном сервере Slicehost с некоторыми легковесными серверными приложениями - apache22, svnserve, mysql и proftpd. Единственное серьезное ограничение сервиса - это ОЗУ - я плачу за 256 МБ.

Я заметил, что если я позволю системе поработать несколько дней / недель, объем свободной оперативной памяти постепенно уменьшается, и вскоре после этого используется файл подкачки. Например, при перезагрузке у меня может быть свободно 60% оперативной памяти, на следующий день может быть 55% и т. Д.

             total       used       free     shared    buffers     cached
Mem:           256        114        141          0          3         50
-/+ buffers/cache:         61        194
Swap:          511          0        511

Как я могу предотвратить уменьшение объема доступной памяти?

редактировать: Вот мой ps -aux перечисление основных потребителей памяти. Я не учел все системные процессы. Я вижу, что apache и mysql используют больше памяти.

    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root      1369  0.0  0.3  16844   952 ?        S<s  00:10   0:00 /sbin/udevd --daemon
    syslog    2110  0.0  0.2  12288   748 ?        Ss   00:10   0:00 /sbin/syslogd -u syslog
    root      2131  0.0  0.2   8128   588 ?        S    00:10   0:00 /bin/dd bs 1 if /proc/kmsg of /var/run/klogd/kmsg
    klog      2133  0.0  0.4   4516  1304 ?        Ss   00:10   0:00 /sbin/klogd -P /var/run/klogd/kmsg
    root      2154  0.0  0.4  50904  1152 ?        Ss   00:10   0:00 /usr/sbin/sshd
    root      2211  0.0  0.2   3932   592 ?        S    00:10   0:00 /bin/sh /usr/bin/mysqld_safe
    mysql     2253  0.0  8.8 161940 23252 ?        Sl   00:10   0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mys
    root      2254  0.0  0.2   3836   604 ?        S    00:10   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
    proftpd   2340  0.0  0.5  63000  1504 ?        Ss   00:10   0:00 proftpd: (accepting connections)
    root      2356  0.0  0.3  18608   964 ?        Ss   00:10   0:00 /usr/sbin/cron
    root      2384  0.0  0.3  83360   892 ?        Ss   00:10   0:00 svnserve -d -r /etc/svn/svn-rep-01
    root      2387  0.0  3.5 194628  9220 ?        Ss   00:10   0:00 /usr/sbin/apache2 -k start
    root      2409  0.0  0.2   3852   576 tty1     Ss+  00:10   0:00 /sbin/getty 38400 tty1
    root      2410  0.0  0.5  15252  1444 ?        Sl   00:10   0:00 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2/ext/apache2/ApplicationPoolServerExecutable 0 /us
    www-data  2411  0.0  3.4 195880  9100 ?        S    00:10   0:00 /usr/sbin/apache2 -k start
    www-data  2412  0.0  7.3 205532 19400 ?        S    00:10   0:00 /usr/sbin/apache2 -k start
    www-data  2413  0.0  3.3 195620  8824 ?        S    00:10   0:00 /usr/sbin/apache2 -k start
    www-data  2414  0.0  3.4 195880  9080 ?        S    00:10   0:00 /usr/sbin/apache2 -k start
    www-data  2415  0.0  3.4 195888  9056 ?        S    00:10   0:00 /usr/sbin/apache2 -k start
    root      2416  0.0  2.4  43448  6512 ?        Sl   00:10   0:00 Passenger spawn server
    www-data  2437  0.0  7.7 208116 20248 ?        S    00:48   0:00 /usr/sbin/apache2 -k start
    www-data  2519  0.0  3.3 195644  8820 ?        S    02:12   0:00 /usr/sbin/apache2 -k start
    root      3026  0.0  1.1  67960  2892 ?        Ss   20:53   0:00 sshd: dv [priv]
    dv        3028  0.0  0.6  67960  1700 ?        S    20:53   0:00 sshd: dv@pts/0
    dv        3029  0.1  0.8  19392  2304 pts/0    Ss   20:53   0:00 -bash
    dv        3041  0.0  0.4  15056  1092 pts/0    R+   20:54   0:00 ps -aux

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

Я подумаю о переходе на lighthttpd или nginx или, по крайней мере, уменьшу параметр Apache MaxClients.

Вы заметите, что часть этого потребляется «кешем».

Это просто кэширование чтения / записи на диск, и вы можете считать, что он свободен, потому что он будет выгружен, как только что-то более важное понадобится.

Это ускоряет ввод-вывод на диск. :)

В настоящее время у меня в коробке 2 ГБ дискового кеша, что делает работу быстрее.

«бесплатно» - плохой инструмент для анализа памяти. Я считаю "htop" гораздо более практичным инструментом общего управления системой, который дает как практическое представление об использовании памяти, так и практический способ исследования процессов.

Вот так, чуть красивее:

1  [|||||                                                                          5.0%]  Tasks: 156 total, 2 running
2  [|||                                                                            2.5%]     Load average: 0.29 0.30 0.31
Mem[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||     1182/3967MB]     Uptime: 5 days, 16:25:36
Swp[||                                                                        37/2000MB]
Mem:3967M used:1182M buffers:0M cache:1952M

(если вам интересно, что такое низкое время безотказной работы ... это ноутбук)

Многие люди могут предоставить способы отменить кеширование, чтобы получить данные из свопа, но это более или менее бессмысленно. Все, что вы в конечном итоге сделаете, это снизите производительность, если у вас нет программы, которая действительно интенсивная память , но выполняется интенсивно только каждые несколько дней, так что, когда он не работает интенсивно, он выгружается, а когда он все же включается, вы не можете ждать ~ 0,5 секунды, необходимые для его возврата в память с диска.

Лично я не могу придумать ни одной хорошей программы, которая бы соответствовала этим условиям. пожимает плечами

Люди, написавшие ядро, более или менее знают, что делают в этом отделе, я бы доверял их мнению, если только вы определенный ты знаешь лучше.

как сказал @Paul Betts, переход на lighttpd может помочь вам немного сэкономить. В зависимости от того, что вы делаете, всегда есть несколько компромиссов.

Использую на своих vps. Имеет только 96 МБ оперативной памяти и 63 МБ подкачки, и только при использовании 26 МБ (без шуток) и 35 МБ соответственно. И там тоже работает база данных. (Postgres, но на самом деле не используется)

Игнорируйте первую строку. Важные числа находятся в строке «- / + buffers / cache». Linux очистит кеш и буферы, чтобы освободить место для процессов.

Мой сервер Debian обычно показывает от 2 до 10 мегабайт свободного места в первой строке. Вторая строка показывает, что у меня свободно 50 мегабайт. (Всего в системе 256 RAM)

Ваши числа выглядят нормально. НЕ очищайте буферы / кеш. Свободного барана у тебя более чем достаточно.

Теперь, если у вас нет свободной памяти для кеша, ваша система будет работать медленно. Если вы начнете использовать много подкачки, у вас возникнут проблемы с обслуживанием веб-страниц.

вам нужно изменить свою подкачку (сообщает ядру, насколько оно должно подкачиваться)

# sysctl -w vm.swappiness=0

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

отредактируйте строку vm.swappiness в /etc/sysctl.conf, чтобы настроить ее при загрузке

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

Используйте lighttpd вместо apache - это не решит проблему утечки памяти, но поможет сэкономить оперативную память. Кроме того, вы должны использовать top / htop, чтобы выяснить, в каком процессе происходит утечка, после чего вы сможете отладить его дальше. Есть 1000 причин, по которым это могло произойти - вам нужно исследовать.

Если он всегда врезается в своп, пока он не заполнится, у вас, вероятно, проблема. Пока в свопинге мало что используется, а физическая память заполнена, это нормально. Вы хотите, чтобы весь ваш физический барабан был израсходован, вот для чего он нужен.

Ответ зависит от того, что ест вашу оперативную память. Начните сужать проблему, сравнивая результат двух ps aux проходит с интервалом 24 часа.

Кроме того, имейте в виду, что Linux интенсивно использует память для кэширования ввода-вывода. Эти кеши освобождаются, как только другой процесс запрашивает это пространство, поэтому они никогда не должны отрицательно влиять на производительность. Это означает, что вторая строка в freeвывод (-/+ buffers/cache) является важным.

Какая у вас настройка MaxClients в вашей конфигурации Apache? Моя виртуальная машина Slicehost делала то же самое, пока я не опустил свою до чего-то разумного для того объема оперативной памяти, который у меня есть в коробке.

Это немного похоже на пробку, но, надеюсь, поможет сэкономить ресурсы;)

Веб-сервер Nginx (лучше, чем Apache) - VPS BIBLE Pt 11

.. это проверено на Linode, который аналогичен Slicehost .. но они предоставляют 360 МБ ОЗУ за те же 20 долларов в месяц (и дополнительные 6 ГБ места), которые вы будете платить, DV, за свои план.

Другая часть Библии VPS, ссылка на которую имеется в полном указателе серии на странице, описывает, как настроить Xcache, если это поможет.

В противном случае вы можете играть с swappiness без перезагрузки, что очень важно для сервера: -

sudo sysctl vm.swappiness = 10

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

Ты можешь использовать:

эхо 1> / proc / sys / vm / drop_caches

Я считаю, что нужно также освободить кеши. Он должен полностью отбросить кеши, но через несколько дней вы вернетесь туда, где находитесь сейчас. Однако вы можете настроить его.