Linux за българи: Форуми

BSD секция => Системни настройки => Темата е започната от: theshit в May 09, 2014, 23:13



Титла: eAccelerator: shmmax should be at least 2MBPHP
Публикувано от: theshit в May 09, 2014, 23:13
Здравейте, имам следния проблем с php eAccelerator под NetBSD. Apache не ще да стартира. Apache Error Log:
Цитат
eAccelerator: shmmax should be at least 2MBPHP Warning:  [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error:  Unable to start eAccelerator module in Unknown on line 0

Цитат
[root@nt001]# uname -a
NetBSD Nt001.tk 6.1_STABLE NetBSD 6.1_STABLE (nt001) #0: Fri May  2 01:04:10 EEST 2014  billy@nt001.tk:/usr/obj/sys/arch/i386/compile/nt001 i386

Цитат
[root@nt001]# php -v
PHP 5.3.28 (cli) (built: Apr  1 2014 01:31:17)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
    with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
    with Suhosin v0.9.33, Copyright (c) 2007-2012, by SektionEins GmbH
[root@nt001]#

Преди време имах същия проблем, бях намерил решение и го направих по тоя ($2) начин, но вече не мога, защото не го компилирам от порт колекция, а направо го инсталирам с pkgin (като apt-get, yum).

Някакви идеи  ??? :o



Титла: Re: eAccelerator: shmmax should be at least 2MBPHP
Публикувано от: neter в May 10, 2014, 00:00
Пробвай да зададеш стойността на kern.ipc.shmmax със sysctl
Цитат
sysctl -w kern.ipc.shmmax=БАЙТИ
Ако не ти позволи, задай стойността през kern.ipc.shmmaxpgs пак със sysctl
Цитат
sysctl -w kern.ipc.shmmaxpgs=БРОЙ
Имай предвид, че, тъй като PAGE_SIZE по подразбиране е 4096 байта, то ако искаш да зададеш kern.ipc.shmmax да е с размер 2МБ, то за kern.ipc.shmmaxpgs трябва да зададеш 512
Цитат
2 * 1024 * 1024 / 4096 = 512
Ако се получи, впиши крайните стойности в /etc/sysctl.conf, за да се прилагат тези стойности и при следващите зареждания на системата.


Титла: Re: eAccelerator: shmmax should be at least 2MBPHP
Публикувано от: theshit в May 10, 2014, 10:28
Цитат
[root@nt001]# sysctl kern.ipc.shmmaxpgs
kern.ipc.shmmaxpgs = 262144
[root@nt001]# sysctl -w kern.ipc.shmmaxpgs=2097152
kern.ipc.shmmaxpgs: 262144 -> 2097152
[root@nt001]# apachectl restart
[root@nt001]# cat /var/log/httpd/error_log
[Sat May 10 10:25:05 2014] [notice] SIGHUP received.  Attempting to restart
[Sat May 10 10:25:07 2014] [notice] Digest: generating secret for digest authentication ...
[Sat May 10 10:25:07 2014] [notice] Digest: done
[Sat May 10 10:25:08 2014] [notice] Apache/2.2.27 (Unix) mod_ssl/2.2.27 OpenSSL/1.0.1g DAV/2 PHP/5.3.28 configured -- resuming normal operations

С  kern.ipc.shmmaxpgs стана, благодаря :)
Няма да забравя да го сетна в /etc/sysctl.conf за да се изпълнява при boot на машината ;)


# ааа още нещо, не те разбрах точно, какво искаше да кажеш. Има някакви зависимости между тия стойности ли ? В смисъл:

kern.ipc.shmmaxpgs  (в MB) * 1024 * 1024 / 4096 = kern.ipc.shmmaxpgs  (в MB) ? Или казано по по-лесния начин
kern.ipc.shmmaxpgs  / 4096 = kern.ipc.shmmaxpgs

Щото в случая даже като гледам е точно така:

kern.ipc.shmmax = 8589934592
kern.ipc.shmmaxpgs = 2097152



Титла: Re: eAccelerator: shmmax should be at least 2MBPHP
Публикувано от: neter в May 10, 2014, 14:26
Има някакви зависимости между тия стойности ли ?
Да. Зависимостта между kern.ipc.shmmaxpgs и kern.ipc.shmmax е същата, както съответно между броя на корите за яйца и броя на яйцата, които можеш да имаш общо в тях. В случая по подразбиране една кора за яйца побира 4096 яйца, така че, ако искаш да носиш 2097152 яйца ще ти трябват 512 кори, и съответно, ако имаш 512 кутии ще можеш да носиш 2097152 яйца :) 1 яйце е 1 байт споделена памет, а 1 кора за яйца е 1 страница (page) от тази памет.

Малко са ти объркани интерпретациите на формулата. Правилните са:
Цитат
kern.ipc.shmmax (в MB) * 1024 * 1024 / PAGE_SIZE = kern.ipc.shmmaxpgs (в брой)
kern.ipc.shmmax / PAGE_SIZE = kern.ipc.shmmaxpgs
където PAGE_SIZE по подразбиране е 4096 байта.