|
Компьютерный форум OSzone.net » Linux и FreeBSD » Общий по Linux » Redhat/Fedora - Как ограничить объем памяти, используемый Linux под buff/cache память? |
|
|
Redhat/Fedora - Как ограничить объем памяти, используемый Linux под buff/cache память?
|
Новый участник Сообщения: 28 |
Профиль | Отправить PM | Цитировать Всем привет! Очень мне не нравится, что в Линукс так свободно (как гно в проруби) болтается память, выделяемая под кэширование файловых операций ввода-вывода. У меня все жестко в системе - в ящике столько-то ОЗУ, из него столько-то памяти выделено под базу данных (Оракл), и все было бы хорошо, если бы не прыгающий туда-сюда buff/cache!!! То он 100 Мб, то 900 Мб, то опять 600. Из-за этого я не могу выделить памяти базе больше. Ибо если я пытаюсь это сделать, косвенно требуя от Линукс передать память от файловых буферов базе данных, то кажется мне, что это не срабатывает, и buff/cache начинает дико свопить, сливая накопленные в файловом кэше данные на диск, и упорно считая, что под buff/cache должно выделяться от 0 до 1 Гб ОЗУ. А если это не получается разместить в ОЗУ, то оно прет в своп. Я бы хотел в ОС память жестко под buff/cache выделить (скажем, 50 Мб), а освободившуюся память отдать базе. У Оракла свои механизмы работы с кэшем базы данных, и buff/cache не кэширует потоки из кэша базы к/от файлам базы. Как это сделать?!
Фразы типа "Linux always tries to use RAM to speed up disk operations by using available memory for buffers (file system metadata) and cache (pages with actual contents of files or block devices). This helps the system to run faster because disk information is already in memory which saves I/O operations. If space is needed by programs or applications like Oracle, then Linux will free up the buffers and cache to yield memory for the applications." я уже читал. Не всем и не всегда такая политика подходит. В ситуации, когда ты вручную конфигурируешь память туда, сюда и вооон туда, неподдающийся управлению компонент в виде самовольно растущей или сжимающейся buff/cache памяти очень сильно раздражает и сковывает. |
|
Отправлено: 16:10, 14-12-2018 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Вот реальный пример:
[oracle@.!.]$ free -m total | used | free | shared | buff/cache | available Mem: 7710 | 7436 | 51 | 26 | 222 | 92 Swap: 8063 | 60 | 8003 [oracle@.!.]$ Спрашивается, какого рожна система выделила под файловый кэш 222 Мб ОЗУ, и при этом в своп улетела на 60!!! Гораздо логичнее было бы не выделять так много ОЗУ под файловый кэш, и тогда бы не пришлось залезать в своп. |
Последний раз редактировалось GrayMagellan, 14-12-2018 в 17:57. Отправлено: 17:36, 14-12-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3270
|
Профиль | Отправить PM | Цитировать GrayMagellan, а почему бы просто не вырубить swap? И проблемы не будет. Линукс под кеш не выделит памяти больше, чем есть свободно. А будет там гипотетически полезный дисковый кеш или просто абра-кадабра от ошмётков данных - кого это волнует?
|
Отправлено: 22:11, 14-12-2018 | #3 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата GrayMagellan:
Цитата GrayMagellan:
Кэш - это буфер, который не сразу освобождается. Чтобы что-то (oracle в том числе) могло работать с данными на диске, они должны лежать в кэше. |
||
Отправлено: 11:26, 15-12-2018 | #4 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Цитата shisik:
Но знаете... В принципе я думаю что своп тут не причем - у меня вопрос об ограничении выделяемого ОС объема памяти под buff/cache, проходящего по строке Mem. А это ведь исключительно ОЗУ? Ну отключу я своп. А это приведет к тому, что Linux по строке Mem прекратит выделять такие гигантские объемы памяти? И станет ли он выделять память в том объеме, как я хочу, а не как он решит? Цитата Busla:
А, блин . Только сейчас понял, что вы имели ввиду . А что такое тогда страничный кэш?! Для чего он? Память, насколько я понял из документации на Linux, там всегда делится на страницы - 4 Кб стандартные и 2 Мб для режима HugePages. Нет, вроде как память buff/cache - это файловый кэш. По крайней мере, я так понял эту статью с RedHat, поскольку Oracle Linux - это Red Hat с переклеенной наклейкой . Вот там даются такие слова: "...most of the memory use is for buffers and cache. Linux always tries to use RAM to speed up disk operations by using available memory for buffers (file system metadata) and cache (pages with actual contents of files or block devices). This helps the system to run faster because disk information is already in memory which saves I/O operations. If space is needed by programs or applications like Oracle, then Linux will free up the buffers and cache to yield memory for the applications..." Вот у меня, похоже, это и происходит - перевыделив памяти под файловый кэш, Linux вынуждена его сливать на диск, уходя в своп (наверное, все же не в своп, а в дисковый ввод-вывод), для того, чтобы освбодить память для запуска приложений. |
|||
Последний раз редактировалось GrayMagellan, 16-12-2018 в 10:05. Отправлено: 09:49, 16-12-2018 | #5 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать GrayMagellan, можете считать меня хамом, но "Смотрю в книгу - вижу фигу":
Цитата GrayMagellan:
|
|
Отправлено: 13:36, 16-12-2018 | #6 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Цитата Busla:
Ни в коем случае! Я вам искренне благодарен. Я пришел сюда за знаниями, и буду благодарен любому, кто возьмет меня за шиворот и ткнет носом в знания . Так что спасибо вам. Я прочитал следующую главу. Но мне непонятны следующие слова - "...To control the percentage of total memory used for page cache in Red Hat Enterprise Linux 5, change the pagecache kernel parameter...". А процент от чего контролирует этот параметр? По умолчанию 100% ("...default value of 100..."), и если следовать статье, то получается все 100% моего ОЗУ должны по умолчанию пойти под страничный кэш? Как это? Только... Я сейчас пытался посмотреть действующее значение этого параметра, и выяснилось, что у меня в Oracle Linux 7.6 (он же Red Hat 7.6) такого параметра в /proc/sys/vm/ нету . Отменили его в последних версиях Линукса? |
|
Последний раз редактировалось GrayMagellan, 17-12-2018 в 11:36. Отправлено: 11:21, 17-12-2018 | #7 |
Забанен Сообщения: 6345
|
Цитата GrayMagellan:
Цитата GrayMagellan:
Цитата GrayMagellan:
Если вам так уж хочется поучить систему (это иногда действительно нужно бывает в определённых ситуациях, но я не знаток Oracle и прямых рекомендаций дать не могу. разве что имхо памяти для большой БД, для чего обычно используют его, как-то уж очень мало), то можете покрутить эти гайки: vm.swappiness – от 0 до 100, по умолчанию 60, чем выше число, тем охотнее система лезет в свап. Совсем свап выключать нельзя – чревато OOM киллами. vm.vfs_cache_pressure – от 0 до не знаю какой величины, по умолчанию 100. Этот параметр отвечает, с какой скоростью освобождается кэш файлов/директорий. Чем больше число, тем чаще. Скажем при 1000 вместо 100 - в 10 раз чаще. vm.dirty_background_ratio/vm.dirty_ratio - от 0 до 100, чем меньше, тем быстрее страничный кэш сбрасывается на диск. Можете посмотреть все гайки vm.*, почитать про каждую по отдельности, покрутить, только осторожно, постепенно и при каждом изменении проводить тесты производительности и стабильности. В линуксе выстрелить себе в ногу кручением параметров ядра оч просто. |
|||
Последний раз редактировалось Jula0071, 17-12-2018 в 13:02. Отправлено: 12:49, 17-12-2018 | #8 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Цитата Jula0071:
Цитата Jula0071:
С моделями памяти Linux в целом и в применении к Ораклу у меня после прочтения кучи литературы и интернета в голове уже полный хаос настал. Я уж и оракловый форум по Оракл Линукс помучал, и тех. поддержку ихнюю - нигде понятной для меня информации не получил . Но это в текущем контексте оффтоп. |
||
Отправлено: 15:14, 17-12-2018 | #9 |
Забанен Сообщения: 6345
|
Цитата GrayMagellan:
vm.hugepages_treat_as_movable = 0 vm.hugetlb_shm_group = 0 vm.nr_hugepages = 0 vm.nr_hugepages_mempolicy = 0 vm.nr_overcommit_hugepages = 0 Цитата GrayMagellan:
Например, если у вас мало памяти и быстрое IO – то скручивать в минимум vm.dirty полезно, если наоборот – то лучше увеличить, при этом принимая во внимание, что сбой может повлечь потерю данных. Да, всё непросто. |
||
Отправлено: 16:07, 17-12-2018 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
HDD - Пропала вся память и объем жесткого диска | Dimoriz | Накопители (SSD, HDD, USB Flash) | 4 | 01-02-2016 01:07 | |
Разное - [решено] Как ограничить использование оперативной памяти ? | berk2030 | Microsoft Windows 2000/XP | 10 | 02-10-2013 20:21 | |
Разное - Как ограничить память процессу ? | kpripper | Microsoft Windows 7 | 2 | 13-11-2011 00:19 | |
Win 2003 SP1 - Как ограничить количество подключений под одним логином? | allzero | Microsoft Windows NT/2000/2003 | 7 | 19-01-2009 14:19 | |
Реальный объем памяти | kapitanvagin | Хочу все знать | 6 | 05-01-2009 18:45 |
|