ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[emerg] 6428#0: malloc() 3053187144 bytes failed (12: Cannot allocate memory)


  • To: nginx-ru@xxxxxxxxx
  • Subject: [emerg] 6428#0: malloc() 3053187144 bytes failed (12: Cannot allocate memory)
  • From: Eugene Batogov <johnbat26@xxxxxxxxx>
  • Date: Fri, 25 Mar 2011 11:53:47 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:date:message-id:subject:from:to :content-type; bh=ymo1T3TRUqxPt49G96ZXbIT13rEQgs8Qxwk4ztTzYNI=; b=rbDP7jhBjaJNMW6t5NTZKtXEwE/i3nDSZgLr83Nu9WXS268gAFZxA6ixP27xjAlzfb 9B+O3/7wxQel6ymfzfEKjgKYOjg1VgTFNBy7qKyNYQ/BZMuiVGpyTvGLaAJ8nskud+y7 wBmtC7Xr8XvVLEwvYHWRsT653U92gpWYJEPmA=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=Ztem2+MG2kTmJfOy6Qt3tzEtORE+73KDAmz+Y44kvKH0TOaMBWMdUTIkYk7mixNO/j xTZrRSF2/4OM4QMz/MUKP9xOjvfg9XrAWMtV90W1llGyLQ+yLn39ERcq1uxGuWlwHakg HgiU4aA+YLRyi9/LfoZ7XMH/EWTo3wLV3CwNw=

Приветствую всех.
Возникли две интересные проблемы, а точнее записи в nginx.log:
...
2011/03/18 17:34:46 [alert] 6431#0: ngx_slab_free(): chunk is already free
2011/03/18 17:34:46 [alert] 6429#0: ngx_slab_free(): chunk is already free
2011/03/18 17:34:46 [alert] 6429#0: ngx_slab_free(): chunk is already free
2011/03/18 17:35:16 [alert] 6429#0: ngx_slab_free(): chunk is already free
2011/03/18 17:35:16 [alert] 6429#0: ngx_slab_free(): chunk is already free
2011/03/18 17:35:46 [alert] 6433#0: ngx_slab_free(): chunk is already free
2011/03/18 17:35:46 [alert] 6433#0: ngx_slab_free(): chunk is already free
2011/03/18 17:36:16 [crit] 6436#0: ngx_slab_alloc() failed: no memory
2011/03/18 17:36:16 [crit] 6436#0: ngx_slab_alloc() failed: no memory
2011/03/18 17:36:16 [crit] 6433#0: ngx_slab_alloc() failed: no memory
2011/03/18 17:36:16 [crit] 6433#0: ngx_slab_alloc() failed: no memory
2011/03/18 17:36:16 [crit] 6433#0: ngx_slab_alloc() failed: no memory
2011/03/18 17:36:16 [crit] 6433#0: ngx_slab_alloc() failed: no memory
2011/03/18 17:36:16 [crit] 6429#0: ngx_slab_alloc() failed: no memory
2011/03/18 17:36:16 [crit] 6429#0: ngx_slab_alloc() failed: no memory
....
Почему появляются эти сообщения?
Кто их инициатор?

и вторая:
...
2011/03/18 17:30:16 [emerg] 6428#0: malloc() 3053187144 bytes failed (12: Cannot allocate memory)
...
Под что nginx выделяет так много памяти?
Как это можно узнать?

--------
И еще вопрос: можно ли в Linux x86 увеличить размер памяти выделяемого ядру ?
Просто, если использовать http_push (a.k.a comet) то памяти для сокетов может не хватить при >50K соединений.
А на 64-bit какой размер памяти для ядра по умолчанию?

И еще возникла проблема с остановом nginx после использования nginx_http_push_module.
Он очень долго останавливается, такое ощущение, что ждет окончания таймаутов.

Наш sysctl.conf прикреплен к письму.

--------------
Наши окружения:
-----------
nginx version: nginx/0.7.65
built by gcc 4.1.2 20080704 (Red Hat 4.1.2-48)
TLS SNI support disabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-mail_ssl_module --with-cc-opt='-O2 -g -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables' --add-module=/usr/src/redhat/BUILD/nginx-0.7.65/nginx-upstream-fair --add-module=/usr/src/redhat/BUILD/nginx-0.7.65/nginx_http_push_module-0.692 --add-module=/usr/src/redhat/BUILD/nginx-0.7.65/nginx_upstream_hash-0.3.1
-----------
nginx version: nginx/0.8.53
built by gcc 4.1.2 20080704 (Red Hat 4.1.2-48)
TLS SNI support disabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --with-http_secure_link_module --with-http_random_index_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-mail_ssl_module --with-cc-opt='-O2 -g -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables' --with-ipv6 --add-module=/usr/src/redhat/BUILD/nginx-0.8.53/nginx-upstream-fair --add-module=/usr/src/redhat/BUILD/nginx-0.8.53/nginx-upload-progress-module --add-module=/usr/src/redhat/BUILD/nginx-0.8.53/mod_zip-1.1.6 --add-module=/usr/src/redhat/BUILD/nginx-0.8.53/nginx_upload_module-2.2.0 --add-module=/usr/src/redhat/BUILD/nginx-0.8.53/nginx_mod_h264_streaming-2.2.7 --add-module=/usr/src/redhat/BUILD/nginx-0.8.53/nginx_http_push_module-0.692 --add-module=/usr/src/redhat/BUILD/nginx-0.8.53/nginx_upstream_hash-0.3.1
------------

Из сторонних модулей мы используем:
 - nginx_upstream_hash-0.3.1
 - nginx_http_push_module -0.692.

--

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536

# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 4294967295

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 268435456

###################
#Custom parameters#
###################

# We use it always
# Параметр представляет собой два целых числа, которые определяют диапазон 
локальных портов,
# которые используются в клиентских соединениях, т.е. для исходящих
# соединений, которые связывают нашу систему с некоторым узлом сети, где мы 
выступаем в качестве клиента
net.ipv4.ip_local_port_range = 1025 65535
# Быстрая утилизация сокетов находящихся в состоянии TIME_WAIT
net.ipv4.tcp_tw_recycle = 1
# Время пребывания сокета в состоянии FIN-WAIT-2
net.ipv4.tcp_fin_timeout = 3

# New param
# Длина очереди для входящих пакетов
net.core.netdev_max_backlog = 10000
# Количество возможных подключений к сокету, прежде чем будут отброшены
net.core.somaxconn = 4096
# Буфер под хранение SYN запросов на соединение. Значение по умолчанию 1024, 
что очень мало для нагруженных серверов.
net.ipv4.tcp_max_syn_backlog = 2048
# Возможное количество сокетов в состоянии TIME_WAIT
#net.ipv4.tcp_max_tw_buckets = 720000
# Опция включена, иначе не будет работать опция tcp_tw_reuse описанная ниже
net.ipv4.tcp_timestamps = 1
# Механизм, разрешающий использовать уже существующие сокеты которые находятся 
в состоянии TIME_WAIT, если это не повредит безопасности.
net.ipv4.tcp_tw_reuse = 1
# Временной интервал попытки определения жизнеспособности соединения. 
# По умолчанию 7200, т е через 2 часа после того как через соединение прочел 
последний пакет,
# система отправит keep-alive запрос чтобы узнать состояние соединения. 
Уменьшим этот параметр до 30 минут.
net.ipv4.tcp_keepalive_time = 300
# Количество посылок keepalive запросов и интервалов между запросами. 
# По умолчанию делается 9 попыток с интервалом в 75 секунд, что в свою очередь 
займет 9*75=11 минут и 25 секунд, 
# что в сочетании с параметром по умолчанию net.ipv4.tcp_keepalive_time = 7200 
дает нам 
# значение 2часа 11 минут 25 секунд ? минимальное значение времени после 
которого соединение будет закрыто нашей стороной
# после прохождения через это соединение последнего пакета. Это очень большой 
интервал.
net.ipv4.tcp_keepalive_probes = 7
net.ipv4.tcp_keepalive_intvl = 30
# Максимальный размер буферов по умолчанию для приема и отправки данных через 
сокеты (в байтах)
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216
# Размер буферов по умолчанию для приема и отправки данных через сокеты (в 
байтах)
#net.core.rmem_default = 8388608
#net.core.wmem_default = 4194394
# Настройка буферов для TCP и UDP соединений (min, default, max bytes) (в 
байтах)
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Этот параметр дает ядру больше памяти для TCP.
# Это будет необходимо при 50k+ открытых соединений.
net.ipv4.tcp_mem = 50576 64768 98152

# Количество попыток закрыть соединение перед тем как оно будет разорвано
# принудительно. Если вы администрируете http-сервер, который испытывает
# большие нагрузки, то стоит подумать об уменьшении этого значения.
# Переменная принимает целое число. Значение по-умолчанию  7, что
# соответствует, примерно, от 50 секунд до 16 минут
net.ipv4.tcp_orphan_retries = 3

# Переменная задает максимальное число осиротевших (не связанных ни с
# одним процессом) сокетов. Если это число будет превышено, то такие
# соединения разрываются, а в системный журнал пишется предупреждение. Это
# ограничение существует исключительно ради предотвращения простейших
# разновидностей DoS-атак.
net.ipv4.tcp_max_orphans = 8192

# Максимальное значение открытых файлов. Что бы его узнать, выполните
# команду cat /proc/sys/fs/file-max
fs.file-max = 999999
# Использовать swap только в крайнем случае

vm.swappiness = 20
#Запрещаем кеширование статуса ssthresh (были ретрансмиты) для других соединений
net.ipv4.tcp_no_metrics_save = 1

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.