05.04.11 @ 19:37 Lystopad Aleksandr wrote:
>>>>>При попытке сделать ngctl list получаю subj. В утреннее время,
когда
>>>>>на mpd меньше нагрузка -- ngctl list работает. В пики примерно 500
>>>>>интерфейсов у mpd. Утром 200-300. При этом даже в пики телнет в mpd
>>>>>админ-консоль пускает. Можно смотреть инфу, которую предоставляет
>>>>>mpd. Юзера работают даже в пики, но subj пугает.
>>>>
>>>>Смахивает на нехватку mbuf. Попробовать поднять kern.ipc.nmbclusters
^^^ - вот в этой строке прозвучала идея поднять kern.ipc.nmbclusters
>>>
>>>Это которые в netstat -m? Дык там валом, похоже.
>>
>>Ну, отдельной крутилки для самих mbuf нет. В контексте прерывания
>>доступно
>>не всё из свободного количества. Возможно, дело в этом, надо
проверять.
>
>Было kern.ipc.nmbclusters=128000, поднял в 2 раза. Это значит у меня
>будет выделятся до 512Мб памяти для этих целей? Верно, же?
До 576, если точнее. Хотя судя по выясненному ниже, это был другой code
path, дело не в кластерах, и можно вернуть nmbclusters обратно (память
тоже не резиновая).
А что выяснилось ниже?
Это я невнимательно прочитал письмо первый раз - во втором куске
показалось, что написано maxsockbuf. Потом перечитал, тогда уточнил насчет
опечатки. Но судя по соседнему письму, всё верно, nmbclusters не влияет.
>>>>>Добавил в sysctl
>>>>>
>>>>>net.graph.maxdgram=128000
>>>>>net.graph.recvspace=128000
>>>>>
>>>>>не помогло. При больших значениях вообще mpd не запускается.
>>>>
>>>>При больших значениях надо еще проверять, чтобы kern.ipc.maxsockbuf
>>был
>>>>соответствующим.
>>>
>>>Вадим, спасибо за ответ!!!!
>>
>>А помогло?
>
>Ну С kern.ipc.nmbclusters=256000 получилось поставить
>net.graph.maxdgram и net.graph.recvspace в значение 196000.
>
>mpd не перестартовывал, но ngctl list стал выводить результат, хотя
>за минуту до ввода этих крутилок выдавался сабж.
Гм, не опечатка? Может таки maxsockbuf, а не nmbclusters?
Ну вы предложили, Вадим, поднять kern.ipc.nmbclusters.
Я так понимаю, оба параметра были подняты? kern.ipc.nmbclusters не влияет,
как выясняется.
Я готов крутить все что нужно, лишь бы помогло. Но четкого понимания
пока нету. :(
kern.ipc.maxsockbuf задает общесистемный лимит на размер буфера сокета
(есть еще в ulimit), параметры в net.graph. задают их для сокетов
AF_NETGRAPH, дефолтные и неизменяеме приложением, поскольку setsockopt()
на AF_NETGRAPH не поддерживается. Сообщение netgrpah есть 1 datagram,
которая, естественно, должна влезть в буфер сокета.
>А как бы без прерывания пользовательских сессий узнать поднимится ли
>mpd в следующий раз при таких настройках? Или если работает сейчас,
>то и поднимется?
В код mpd не смотрел. Думаю, поднимется.
>>>А как самому мониторить это? Где посмотреть текущее потребление?
>>Потребление чего именно?
>
>Ну потребление процессом mpd буферов. Потребление вообще netgraph-ом
>памяти, буферов и тд. Я хочу знать хватает или нет, может надо
>добавить. Хочу это знать и мониторить.
Сам процесс mpd их почти не потребляет (можно смотреть в netstat, с
разными -f), а отдельной статистики в ядре, насколько мне известно,
кроме
vmstat -m / vmstat -z не ведется (из соображений производительности).
Вот мои результаты:
# vmstat -m:
Type InUse MemUse HighUse Requests Size(s)
....
netgraph_msg 0 0K - 1836290 64,128,256,512,1024
netgraph_node 2726 682K - 20208 256
netgraph_hook 9288 1161K - 84544 128
netgraph 1946 3235K - 15454 64,256,4096
netgraph_sock 5 1K - 40 128
netgraph_path 0 0K - 978589 16,32
netgraph_mppc 0 0K - 1 1024
netgraph_pppoe 391 37K - 6035 64,512
netgraph_iface 388 49K - 2364 128
netgraph_ppp 388 4656K - 2364
netgraph_bpf 7720 1641K - 60970 128,1024
#
При таких значениях использования памяти переменные
net.graph.maxdgram и net.graph.recvspace задранные в 128000 и выше
похоже ничего не меняют? Верно?
Размеры памяти в общем зависят от разного. Конкретно для ngctl list
релевантно netgraph_node, их примерно 2726 штук. Сообщение NGM_LISTNODES
оперирует массивом структур, по 72 байта на одну ноду. На одного клиента
mpd создается несколько узлов.
Вот еще:
# vmstat -z|grep -E "(ITEM|NetG)"
ITEM SIZE LIMIT USED FREE REQUESTS
FAILURES
NetGraph items: 72, 8207, 1, 376,
1052612, 0
NetGraph data items: 72, 2059, 0, 319,
1550143610, 0
#
Ну и всё это - и тут, и выше - данные самого netgraph, непосредственно же
пакеты данных лежат в буферах зон mbuf*
--
WBR, Vadim Goncharov