12.07.2012 17:33, Anton Yuzhaninov пишет:
> On 07/12/12 13:20, Andrey Lyubimets wrote:
>> # uname -iorp
>> FreeBSD 8.3-RELEASE i386 VPNS
> 
> 1. Если есть возможность - поставить amd64 и то что написано ниже можно будет
> не читать.
два центральных сервера я заменю в ближайшем будущем, поставлю amd64.
Сейчас там железо -P4-2.4GHz/1G, но у меня еще 40 тазиков -- на самых слабых
-- celeron 566MHz/128M. Мне проще на шестёрку назад откатиться.
Специально зашел на такую слабую машинку -

#sysctl -a | grep kmem
vm.kmem_map_free: 11612160
vm.kmem_map_size: 29151232
vm.kmem_size_scale: 3
vm.kmem_size_max: 335544320
vm.kmem_size_min: 0
vm.kmem_size: 40878080

#top
last pid: 75016; load averages: 0.06, 0.01, 0.00 up 26+14:49:15  11:19:49
17 processes:  1 running, 16 sleeping
CPU:  9.1% user,  0.0% nice,  0.0% system,  0.0% interrupt, 90.9% idle
Mem: 11M Active, 10M Inact, 43M Wired, 22M Buf, 53M Free
Swap:

#uptime
11:20AM  up 26 days, 14:49, 1 user, load averages: 0.00, 0.00, 0.00

Судя по vm.kmem_map_free до паники проработает ещё минимум недельку.

> 
> 2. Скорее всего память не течет, а просто 8-ка кушает немного больше памяти,
> чем 6-ки этого хватило чтобы вылести за имеющийся лимит.

> 
> Для начала стоит отдать ядру больше памяти. Под i386 адресное пространство
> маленькое и нужно либо хорошо разбираться в во внутреннем устройстве или
> подбирать параметры методом проб и ошибок (при неправильных значенриях
> паниковать может прямо при загрузке).
> 
> Для начала пересобрать с
> options KVA_PAGES=512
> 
> (это поделит адресное пространство 4 Gb как 2Gb+2Gb - по умолчанию 1 Gb для
> ядра и 3 Gb для userspace).
> 
> Далее нужно постепенно увеличивать лимит физичесокй памяти отдаваемой ядру
> /boot/loader.conf:
>             vm.kmem_size=1G
> 
> Почтепенно, потому что если написать слишком большое значение, то будет
> паниковать, и возможно прямо при загрузке (полезно иметь под рукой KVM, ipmi
> sol или просто serial в соседний сервер).
> 
> Еще можно немного сэкономить KVA/памяти уменьшив эти значения:
> kern.ipc.maxpipekva=4M
> kern.maxbcache=16M # (это не объем закэшированных данных, а объем текущих
> данных в текущих I/O операций, так что если нагрузка на ФС небольшая можно
> ставить маленькие значения
> -http://www.freebsd.org/doc/en/books/arch-handbook/vm-fileio.html)
> 
> 3. Если даже после этих действий паники kmem_map too small не исчезли -
> смотреть что кушаем память. Писать по крону vmstat -mz и после паники изучать
> последний. Еще можно включить запись корок и запускать vmstat на этих корках.
> 
спасибо, попробую ваши рекомендации. А почитать про переменные vm.kmem_* это
man что? или в исходники надо лезть?


-- 
С уважением, Любимец Андрей Алексеевич

Ответить