Jump to content
Калькуляторы

ipfw3: Cannot allocate memory

Добрый день.

 

Столкнулись с проблемой с IPFW3:

ipfw: setsockopt(IP_DUMMYNET_CONFIGURE): Cannot allocate memory

 

При этом перестает бегать трафик (скорее всего связано с невозможностью выделить память под создание новых PIPE). В консоль валятся сообщения

Mar  3 12:06:11 bridge kernel: Bump sched buckets to 65536 (was 0)
Mar  3 12:06:11 bridge kernel: config_sched cannot allocate scheduler 65564
Mar  3 12:06:11 bridge kernel: Bump sched buckets to 65536 (was 0)
Mar  3 12:06:11 bridge kernel: config_sched cannot allocate scheduler 65565

Если в это время попробовать что-либо выполнить в консоли (sysctl, tcpdump, etc), то система перезагружается без предупреждения!

 

Каждое день в 6 часов утра перезапускается фаервол. Но как видно из графиков ниже, память все равно не освобождается и фаервол отрабатывает некорректно. Если перезапустить фаервол руками, то ничего не меняется.

Помогает только перезагрузка системы.

nag1.png

nag2.png

На графиках также видно, что память то свободная была, но почему-то ошибки о нехватке все равно продолжают сыпаться.

 

В чем может быть причина такого поведения? Почему не освобождается память? Может у нас неправильно выставлены параметры в sysctl?

 

Система

FreeBSD 8.1-STABLE-201010 #1: Fri Feb  4 16:46:02 MSK 2011

 

В начале rc.firewall прописаны такие правила для очистки очередей и пайпов:

 

IPFW="/sbin/ipfw -fq"
$IPFW flush
$IPFW pipe flush
$IPFW queue flush
for tables in 1 2 3 4 5 6 7 8 10 11 20 21 40 41 80 81 120 121 122 123 110 111 112 113 42 43 44 45 46 47 48 49 50 51 52
do
    ipfw table "$tables" flush
done

 

Далее правила такого рода:

...
$IPFW pipe 11 config bw 1040Kbit/s mask dst-ip 0xffffffff
$IPFW pipe 12 config bw 1040Kbit/s mask src-ip 0xffffffff
$IPFW add pipe 11 ip from any to table\(10\) via igb0 out
$IPFW add pipe 12 ip from table\(11\) to any via igb1 out
$IPFW add pipe 11 ip from any to table\(10\) via igb2 out
$IPFW add pipe 12 ip from table\(11\) to any via igb3 out
$IPFW add allow ip from any to table\(10\)
$IPFW add allow ip from table\(11\) to any
...

 

Вот такие параметры в sysctl:

 

net.inet.ip.dummynet.io_pkt_drop: 7804870
net.inet.ip.dummynet.io_pkt_fast: 0
net.inet.ip.dummynet.io_pkt: 561862570
net.inet.ip.dummynet.queue_count: 0
net.inet.ip.dummynet.fsk_count: 30
net.inet.ip.dummynet.si_count: 1002
net.inet.ip.dummynet.schk_count: 60
net.inet.ip.dummynet.tick_lost: 0
net.inet.ip.dummynet.tick_diff: 30374
net.inet.ip.dummynet.tick_adjustment: 56758939
net.inet.ip.dummynet.tick_delta_sum: -88
net.inet.ip.dummynet.tick_delta: -200
net.inet.ip.dummynet.red_max_pkt_size: 1500
net.inet.ip.dummynet.red_avg_pkt_size: 512
net.inet.ip.dummynet.red_lookup_depth: 256
net.inet.ip.dummynet.expire_cycle: 0
net.inet.ip.dummynet.expire: 1
net.inet.ip.dummynet.debug: 0
net.inet.ip.dummynet.io_fast: 1
net.inet.ip.dummynet.pipe_byte_limit: 1048576
net.inet.ip.dummynet.pipe_slot_limit: 100
net.inet.ip.dummynet.hash_size: 65536
net.inet.ip.fw.curr_dyn_buckets: 256
net.inet.ip.fw.dyn_buckets: 131072

Share this post


Link to post
Share on other sites
Добрый день.

 

Столкнулись с проблемой с IPFW3:

ipfw: setsockopt(IP_DUMMYNET_CONFIGURE): Cannot allocate memory

vmstat -z |grep NetGraph

что показывает в этот момент?

 

Share this post


Link to post
Share on other sites
Добрый день.

 

Столкнулись с проблемой с IPFW3:

ipfw: setsockopt(IP_DUMMYNET_CONFIGURE): Cannot allocate memory

vmstat -z |grep NetGraph

что показывает в этот момент?

Попробуем, но, как я уже писал, при попытке что-либо ввести в консоли, сервер уходит в ребут.

Share this post


Link to post
Share on other sites
А случайно нет ли на этой же машине ng_nat?

Нет, на этом сервере делается только шейпинг.

Share this post


Link to post
Share on other sites
А случайно нет ли на этой же машине ng_nat?

Нет, на этом сервере делается только шейпинг.

Тогда можно не смотреть. Обновляйтесь на всякий случай до Stable, включайте отладку и пытайтесь снять дампы. Если получится, пишите pr, если нет - пишите в freebsd-ipfw@. Может вам повезёт больше.

 

Share this post


Link to post
Share on other sites
net.inet.ip.dummynet.hash_size: 65536

net.inet.ip.fw.dyn_buckets: 131072

Не многовато? imho можно смело уменьшить раз в 8.

Share this post


Link to post
Share on other sites

Уменьшили, но поведение осталось таким же.

Т.е. когда в 3 ночи перезапускаем ipfw, количество памяти уменьшается.

 

Начало /etc/rc.firewall:

 

IPFW="/sbin/ipfw -fq"
$IPFW flush
$IPFW pipe flush
$IPFW queue flush
for tables in 1 2 3 4 5 6 7 8 10 11 20 21 40 41 80 81 120 121 122 123 110 111 112 113 42 43 44 45 46 47 48 49 50 51 52
do
    ipfw table "$tables" flush
done
...

Т.е. очищаем таблицы и перечитываем правила (в примере выше не показано).

Edited by G@riK

Share this post


Link to post
Share on other sites

for tables in 1 2 3 4 5 6 7 8 10 11 20 21 40 41 80 81 120 121 122 123 110 111 112 113 42 43 44 45 46 47 48 49 50 51 52

do

ipfw table "$tables" flush

done

if [ -n "`ipfw table all list`" ]; then
ipfw table all flush
fi

не?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this