LINUXPORTAL.RU  |   Живое общение LinuxPortal.Ru   |    Ленты событий        |   ФОРУМЫ  |   БИБЛИОТЕКА  |   ССЫЛКИ  |   НОВОСТИ  |   БЛОГИ АДМИНОВ

Участники   Поиск   F.A.Q.    Регистрация    Вход   Начало
Начало » Для администраторов и программистов » Копилка » Управление производительностью абстрактной Linux-системы
Показать: Сегодняшние сообщения  :: Показать голосования :: Навигатор по сообщениям
Отправить по e-mail 
Переключение в режим просмотра в виде древовидного списка сообщений и ответов Создать новую тему Отправить ответ
Управление производительностью абстрактной Linux-системы Втр, 15 Июль 2008 12:44 Переход к следующему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

Появилось предложение выложить всем кому не жаль и у кого есть свои способы/приёмы повышения производительности Linux-систем, с которыми вы постоянно работаете, с пояснениями. Также приветствуется обсуждение по теме и я согласен на отладку и проведение экспериментов на своих системах для отработки каких-то новых решений. :) После набора какой-то критической массы информации я допускаю превращение этого треда в заметку в Библиотеке. Если у вас есть свои намётки, но лень или не получается придумать толковое описание к ним - напишите хотя бы в двух словах что к чему или сошлитесь на какую-нибудь документацию.

Для примера и затравки начну с себя. Сразу оговорюсь, что нижеследующее - не моё изобретение/открытие, разумеется, а честно содранное из документации и инета, только собранное в одном месте (здесь), снабжённое моими комментариями и проверенное "на своей шкуре".

В последнее время для меня стала иметь значение производительность LAMP-решения (Linux-Apache-MySQL-PHP) и, в частности, эффективное использование имеющейся памяти, т.к. я обнаружил, что при наличии свободных сотен мегабайт RAM система зачем-то начинает использовать swap (по данным top). Кроме того, смущают довольно высокие значения buffers и cached (оттуда же). Поиски привели к тому, что значения по умолчанию (как минимум в дистрибутиве Slackware Linux 12-12.1) приводят к довольно неэффективному использованию памяти ядром.

Изменить ситуацию можно при помощи изменения значений переменных ядра через /proc. Вот список некоторых из этих переменных с пояснениями:
swappiness (/proc/sys/vm/swappiness, ед.изм. проценты, до 100) - при заполнении такой части доступной RAM ядро приступит к использованию swap. Посмотреть значение можно при помощи команды "cat /proc/sys/vm/swappiness". В мой системе значение по умолчанию было 60, т.е. когда память заполнялась чуть больше чем наполовину, ядро начинало свопать. Имеет смысл увеличить это значение, я у себя использую 95. Изменить его можно при помощи команды "echo 95 > /proc/sys/vm/swappiness". Разумеется, это надо делать при каждой загрузке системы.
vfs_cache_pressure (/proc/sys/vm/vfs_cache_pressure, ед.изм. "штуки") - влияет на отношение ядра к освободившимся от кэшированных оъектов файловой системы страницам ОЗУ. Значение по умолчанию - 100. Уменьшение этого значения заставляет ядро придерживать эти страницы почаще для своих нужд в будущем. Увеличение значения заставляет ядро чаще отдавать эта страницы для нужд других программ, т.е. при увеличении этого значения величина cached в выводе top будет расти медленнее. Немного подробнее об этой переменной можно прочитать в файле Documentation/filesystems/proc.txt от корня дистрибутива исходных кодов ядра. Какое именно значение стоит выставить мне пока удалось найти только в Сети, обычно рекомендуют 1000. Я думаю, что прояснить этот вопрос помогут исходники ядра, но до этого пока руки не доходят. Проверить и выставить значение можно аналогично действиям из предыдущего пункта.
drop_caches (/proc/sys/vm/drop_caches) - это "командная" переменная, т.е. считывать её значение особого смысла нет, нужно только записывать. Предназначена для запуска принудительного освобождения оперативной памяти из-под кэшированных объектов. Это можно делать время от времени если память под кэши и буферы продолжает расходоваться слишком быстро и ядро снова начинает работать со swap. Побочный эффект - некоторое замедление производительности системы в целом до того, как будут снова закэшированы наиболее части используемые объёкты и данные. Запись в этот файл (/proc/sys/vm/drop_caches) значения 1 запустит очистку кэша страниц оперативной памяти, значение 2 запустит очистку кэша объектов файловой системы, значение 3 запустит 1 и 2 последовательно. Важный момент - данные будут просто уничтожаться, поэтому перед запуском этих процессов имеет смысл выполнить sync чтобы сбросить изменённые данные на диск. Тем не менее, на мой взгляд, для сильно нагруженного сервера, обрабатывающего большие объёмы данных за короткое время, между запуском sync и записью значения в этот файл в кэш могут попасть новые данные, которые на диск уже записаны не будут и, соответственно, будут утеряны. Так что пользоваться этим механизмом следует редко и осторожно, осознавая последствия. Пример команды записи: "sync && echo 2 > /proc/sys/vm/drop_caches".

Обоснованные исправления и дополнения, как обычно, приветствуются и вносятся.

P.S. Есть сомнения относительно vfs_cache_pressure - речь идёт об уже освобождённых страницах или о принуждении к более (или менее) частому их освобождению?

P.P.S. Про то, как и чем проверить производительность своей системы, можно узнать и поговорить здесь - http://linuxportal.ru/forums/index.php/t/22778/

[Обновления: Втр, 15 Июль 2008 17:05]

Re: Управление производительностью абстрактной Linux-системы Втр, 15 Июль 2008 16:07 Переход к предыдущему сообщенияПереход к следующему сообщения
cppmm в настоящее время не в онлайне cppmm  UKRAINE
Сообщений: 532
Зарегистрирован: Июнь 2006
Географическое положение: Tomsk

Пока что ничего особо интересного в голову не приходит, но есть небольшое дополнение. Пареметры swappiness и vfs_cache_pressure необязательно при каждой загрузке менять через /proc. На мой взгляд, удобнее это сделать используя утилиту sysctl и её конфиг /etc/sysctl.conf
Достаточно дописать в него строки:
vm.swappiness = 100
vm.vfs_cache_pressure = 1000
и эти параметры будут устанавливаться при загрузке системы.
Может быть что-то интересное можно ещё найти с помощью команды sysctl -a | less
Re: Управление производительностью абстрактной Linux-системы Втр, 15 Июль 2008 16:20 Переход к предыдущему сообщенияПереход к следующему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

Не во всех дистрах есть и используется sysctl. :)
Re: Управление производительностью абстрактной Linux-системы Втр, 15 Июль 2008 16:25 Переход к предыдущему сообщенияПереход к следующему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

Ещё один важный момент - здесь не предлагается найти АБСОЛЮТНОЕ РЕШЕНИЕ, ускоряющее любую систему в 1000000 раз в любых условиях. Речь идёт только о реально работающих и помогающих вещах в отдельно взятых случаях, кои и следует описать.
Re: Управление производительностью абстрактной Linux-системы Втр, 15 Июль 2008 16:26 Переход к предыдущему сообщенияПереход к следующему сообщения
cppmm в настоящее время не в онлайне cppmm  UKRAINE
Сообщений: 532
Зарегистрирован: Июнь 2006
Географическое положение: Tomsk

San АНДРЕЕВ писал(а) Втр, 15 Июль 2008 15:20

Не во всех дистрах есть и используется sysctl. :)

Не знал. :)
Во всех, с которыми близко общался, присутствует по умолчанию(Debian, Redhat/Fedora, Mandriva), поэтому и решил, что стандартное средство.
Re: Управление производительностью абстрактной Linux-системы Втр, 15 Июль 2008 16:36 Переход к предыдущему сообщенияПереход к следующему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

cppmm
Т.е. программа sysctl присутствует и наличи /etc/sysctl.conf проверяется из rc.S, но "из коробки" этого файла нет.

Mr.Nobody
Речь вообще-то не о стресс-тестировании и тестировании вообще, а том кто и как управляет производительностью своих систем.
Re: Управление производительностью абстрактной Linux-системы Втр, 15 Июль 2008 17:07 Переход к предыдущему сообщенияПереход к следующему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

Сообщения про тестирование вынес в отдельную тему здесь же и сослался на неё из своего первого сообщения.
Re: Управление производительностью абстрактной Linux-системы Сбт, 31 Октябрь 2009 18:50 Переход к предыдущему сообщенияПереход к следующему сообщения
allez в настоящее время не в онлайне allez  RUSSIAN FEDERATION
Сообщений: 152
Зарегистрирован: Январь 2005
Географическое положение: Красноярск
Завсегдатай
Цитата:

swappiness (/proc/sys/vm/swappiness, ед.изм. проценты, до 100) - при заполнении такой части доступной RAM ядро приступит к использованию swap.

Прошу прощения, Александр, а у вас не сохранилось данных по источнику информации? А то мне сегодня сообщили, что она верна с точностью до наоборот. :) В доказательство привели вот эту ссылку: http://kerneltrap.org/node/3000
Цитата:

To tune, simply echo a value from 0 to 100 onto /proc/sys/vm/swappiness. The higher a number set here, the more the system will swap.
Если верить этому, то увеличение значения до 95 должно привести к более интенсивному использованию свопа.
Re: Управление производительностью абстрактной Linux-системы Сбт, 31 Октябрь 2009 23:07 Переход к предыдущему сообщенияПереход к следующему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

Ну, я не один и не два раза наблюдал, что при увеличении этого значения до 100 система совершенно перестаёт свопать и именно поэтому я значение 100 и использую.

Источник сейчас уже не вспомню, много где это попадалось.

С другой стороны, в том же Documentation/sysctl/vm.txt от 2.6.31 написано примерно то же, что и по твоей ссылке. Непонятно, непонятно...
Re: Управление производительностью абстрактной Linux-системы Вск, 01 Ноябрь 2009 00:38 Переход к предыдущему сообщенияПереход к следующему сообщения
Mr.Nobody  RUSSIAN FEDERATION
Сообщений: 909
Зарегистрирован: Ноябрь 2004
Географическое положение: Russia, Moscow
Старожил
guru

Насколько я мог заметить эти параметры довольно часто меняются - появляются новые, исчезают старые, меняется смысл текущих. Рекомендую смотреть исходники ядра (используемого) - это может прояснить кое-что. Иногда.

[Обновления: Вск, 01 Ноябрь 2009 00:38]

Re: Управление производительностью абстрактной Linux-системы Пнд, 02 Ноябрь 2009 01:22 Переход к предыдущему сообщенияПереход к следующему сообщения
Doka в настоящее время не в онлайне Doka  RUSSIAN FEDERATION
Сообщений: 243
Зарегистрирован: Ноябрь 2002
Завсегдатай
San АНДРЕЕВ писал(а) Втр, 15 Июль 2008 12:44


...
В последнее время для меня стала иметь значение производительность LAMP-решения (Linux-Apache-MySQL-PHP) и, в частности, эффективное использование имеющейся памяти, т.к. я обнаружил, что при наличии свободных сотен мегабайт RAM система зачем-то начинает использовать swap (по данным top). Кроме того, смущают довольно высокие значения buffers и cached (оттуда же). Поиски привели к тому, что значения по умолчанию (как минимум в дистрибутиве Slackware Linux 12-12.1) приводят к довольно неэффективному использованию памяти ядром.
...


Это довольно многогранная тема.
Вывод о не эффективности использования памяти на мой взгляд пока мало обоснован.
Использование swap не означает наличия активного pagging (vmstat что показывает?).
Высокие значения buffers и cached плохи только тогда, когда не высок процент попадания ...
Выполненные настройки могут привести к тому, что будет минимизирован буферный кэш ФС и максимум памяти отдан приложениям. Узким местом в этой связке скорее всего является MySQL, кэш которого скорее всего дублируется кэшем ФС. Для MySQL в данной ситуации эти настройки могут оказать положительное влияние, а вот для остального ...
нужно точно выяснить что именно является узким местом в связке, а потом заниматься тюнингом.
Re: Управление производительностью абстрактной Linux-системы Пнд, 02 Ноябрь 2009 12:31 Переход к предыдущему сообщенияПереход к следующему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

Кстати, а можно как-то явно отследить статистику по попаданиям в кэш? Или только косвенно, скажем, по выводу той же vmstat?

Цитата:

Использование swap не означает наличия активного pagging
- а что оно тогда означает? Что вообще означает использование свопа?
Re: Управление производительностью абстрактной Linux-системы Пнд, 02 Ноябрь 2009 13:33 Переход к предыдущему сообщенияПереход к следующему сообщения
Doka в настоящее время не в онлайне Doka  RUSSIAN FEDERATION
Сообщений: 243
Зарегистрирован: Ноябрь 2002
Завсегдатай
статистику можно посмотреть например через sar (правда я не знаю есть ли он в слаке).
Использование swap означает, что часть страниц выгружена на диск.
Это могут быть страницы больше не используемые программой (например данные инициализации) или редко используемые, если процесс ушел в sleep. top показывает общий объем выгруженых страниц, а не активность pagging.
Re: Управление производительностью абстрактной Linux-системы Пнд, 02 Ноябрь 2009 13:49 Переход к предыдущему сообщенияПереход к следующему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

Про swap я был уверен в том, что страницы сбрасываются на диск только тогда, когда для новых нехватает свободного объёма ОЗУ. Это не так?

Освобождение памяти когда этого явно не требуется выглядит (для меня) несколько неразумным. Если же это делается "на упреждение", то что если других данных более не ожидается? Получится, страницы были сброшены без веских причин, а их загрузка обратно по-моему довольно затратна для того, чтобы таскать их таким образом туда-сюда.
Re: Управление производительностью абстрактной Linux-системы Пнд, 02 Ноябрь 2009 15:10 Переход к предыдущему сообщенияПереход к следующему сообщения
Doka в настоящее время не в онлайне Doka  RUSSIAN FEDERATION
Сообщений: 243
Зарегистрирован: Ноябрь 2002
Завсегдатай
озу используется под программы и под кэш ФС.
по умолчанию как я понимаю в соотношении 60:40,
если ОЗУ занят на 60% ОС может начать выгрузку части страниц процессов в swap. если эти процессы в sleep это разовая операция позволит освободить память.
упреждение( если угадать) очень сильно повышает производительность.
Re: Управление производительностью абстрактной Linux-системы Пнд, 02 Ноябрь 2009 15:17 Переход к предыдущему сообщенияПереход к следующему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

Про 60:40 это ваши догадки или где-то в документации прочитать можно? И что вы тогда думаете об информации по приведённой выше ссылке (http://kerneltrap.org/node/3000)?
Re: Управление производительностью абстрактной Linux-системы Пнд, 02 Ноябрь 2009 17:36 Переход к предыдущему сообщенияПереход к следующему сообщения
Mr.Nobody  RUSSIAN FEDERATION
Сообщений: 909
Зарегистрирован: Ноябрь 2004
Географическое положение: Russia, Moscow
Старожил
guru

Безусловно, что

Цитата:


Использование swap не означает наличия активного pagging



поскольку это разные вещи.

Хотелось бы напомнить что память = RAM + swap (HDD). Параметр (не уверен, но на основе здравого смысла) свопинесс скорее всего означает при размещении процесса в памяти что использовать - RAM или HDD.
Re: Управление производительностью абстрактной Linux-системы Пнд, 02 Ноябрь 2009 18:24 Переход к предыдущему сообщенияПереход к следующему сообщения
Mr.Nobody  RUSSIAN FEDERATION
Сообщений: 909
Зарегистрирован: Ноябрь 2004
Географическое положение: Russia, Moscow
Старожил
guru

Я понимаю это так - есть RAM - всё размещается там + буферный/страничный кэш. Как только RAM становится на 100% забит - принимается решение - сокрашать страничный/буферный кэш или свопить.Вот тут то эти параметры в хитрых формулах и используются.
icon12.gif  Re: Управление производительностью абстрактной Linux-системы Пнд, 02 Ноябрь 2009 23:38 Переход к предыдущему сообщенияПереход к следующему сообщения
Doka в настоящее время не в онлайне Doka  RUSSIAN FEDERATION
Сообщений: 243
Зарегистрирован: Ноябрь 2002
Завсегдатай
San АНДРЕЕВ писал(а) Пнд, 02 Ноябрь 2009 15:17

Про 60:40 это ваши догадки или где-то в документации прочитать можно? И что вы тогда думаете об информации по приведённой выше ссылке (http://kerneltrap.org/node/3000)?

догадки( до исходников руки тоже не доходят).
если памяти много swap можно вообще отключить...
Уходим в дебри. Изначально вопрос был о тюнинге производительности,
а для этого сначала надо определить узкое место, а уже потом смотреть как его устранить.

http://markelov.blogspot.com/2009/01/linux-procmeminfo.htmlНа серверах с большим объемом ОЗУ увеличения swappiness может свести все выгоды использования swap "на нет" из-за активного использования дисковой подсистемы и процессорного времени для поиска и сброса на диск неактивных страниц памяти.

2Mr.Nobody RAM = non-pageable(обычно пространство ядра)+pageable+FS_buffers
Re: Управление производительностью абстрактной Linux-системы Втр, 03 Ноябрь 2009 00:19 Переход к предыдущему сообщенияПереход к предыдущему сообщения
San АНДРЕЕВ в настоящее время не в онлайне San АНДРЕЕВ  RUSSIAN FEDERATION
Сообщений: 8446
Зарегистрирован: Июнь 2002
Географическое положение: Санкт-Петербу...

administrator · partner

Doka писал(а) Пнд, 02 Ноябрь 2009 23:38

сначала надо определить узкое место, а уже потом смотреть как его устранить.

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

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

[Обновления: Втр, 03 Ноябрь 2009 09:18]

Страниц (2): [1  2    »]  Переключение в режим просмотра в виде древовидного списка сообщений и ответов Создать новую тему Отправить ответ
Предыдущая тема:Не получается извлечь раздел из образа целого диска
Следующая тема:Осваиваю Drupal Views.
Переход к форуму:
  

-=] Вернуться вверх [=-
[ Сформировать XML ] [ RSS ]

Текущее время: Сбт Июл 31 17:59:51 MSD 2010
.:: Обратная связь :: Начало ::.

При поддержке: FUDforum 3.0.0.
Copyright © 2001-2009 FUDforum Bulletin Board Software

©"Linuxportal.Ru". Материалы сайта можно использовать свободно при условии сохранения этой свободы при дальнейшем распространении, если явно не указано иное.

Дизайн и программирование: ,
Поставьте нашу кнопку: Linux Portal.ru ::: Линукс Портал.ру