pcre_compile() failed: failed to get memory

Igor Sysoev is at rambler-co.ru
Fri Apr 25 16:43:50 MSD 2008


On Fri, Apr 25, 2008 at 03:35:11PM +0300, Aleksej Novikov wrote:

> Hello Igor,
> 
> Friday, April 25, 2008, 2:56:53 PM, you wrote:
> 
> > On Fri, Apr 25, 2008 at 02:41:00PM +0300, Aleksej Novikov wrote:
> 
> >> Hello ,
> >> 
> >>   Такая вот ерунда иногда бывает.
> >> 
> >> # /etc/init.d/nginx restart
> >>  * Checking nginx' configuration ...
> >> 2008/04/25 13:24:21 [emerg] 10995#0: malloc() 16384 bytes failed (12: Cannot allocate memory)
> >> 2008/04/25 13:24:21 [emerg] 10995#0: pcre_compile() failed: failed to get memory in "^.+\.(php)$" at "^.+\.(php)$" in /etc/nginx/nginx.conf:276262
> >> 2008/04/25 13:24:21 [emerg] 10995#0: the configuration file /etc/nginx/nginx.conf test failed
> >>  * failed, please correct errors above
> >> 
> >> 
> >>  Конфиг нереально больщой, в нём порядка 30.000 хостов.
> 
> > Как выглядит типичный server ?
>         server {
>         listen xx.xx.xx.xx ;
>         error_page 404  /;
>         server_name www.aa.bb ww.bb;
> 
>         location / {
>         root   /foo/bar;
>         index   index.html index.phtml index.htm index.php4 index.php3 index.php index.wml;
>         allow all;
>     }
> 
> 
> и <1% дополнительно
> 
>         location ~* ^.+\.(php)$ {
>         root /foo/bar;
>         rewrite .*  http://aa.bb.cc/php_out.html   break;
>         }
> 
> Bсего 54554 хоста.
> nginx/0.5.26
> 

1) вынести root на уровень server.
2) вынести "error_page  404 /" на уровень http и описать явно там, где
   нужна другая обработка.
3) вынести "index   index.html ..." на уровень http и описать явно там, где
   нужна другая обработка.
4) убрать "allow all".

> > Я иногда думаю как-то уменьшить потребление памяти в конфиге, но тут есть
> > два момента.
> 
> > 1) Уменьшать имеет смысл для встроенных систем, но не исключено, что новый
> > код займёт больше места, чем сэкномленная память на небольшом конфиге.
> 
> > 2) Что касается обычных систем, то не понятно, имеет ли это смысл, если,
> > например, у facebook'а в качестве стандартных серверов (коих порядка 10,000)
> > идут машины с 32G памяти. Я думаю, ещё пару лет и они станут стандартными
> > для всех, как сейчас 2-4G.
> 
> Реальлно добавление RAM тупо решит проблему ?

Что показывает limits ?


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list