FastNetMon

Показаны сообщения с ярлыком SHM. Показать все сообщения
Показаны сообщения с ярлыком SHM. Показать все сообщения

понедельник, 31 мая 2010 г.

Как научить eAccelerator не работать c shm/sysvipc памятью, а переключить его на mmap

Имеем: eAccelerator + shm валит сервер с ошибками:

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
eAccelerator: Could not allocate 33554432 bytes, the maximum size the kernel allows is 1048576 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax.


При его сборке есть следующее:

checking for sysvipc shared memory support... yes
checking for mmap shared memory support... yes
checking for mmap on /dev/zero shared memory support... yes
checking for anonymous mmap shared memory support... yes
checking for posix mmap shared memory support... no
checking for best shared memory type... sysvipc


То есть, есть выбор между различными хранилищами, так как мой баг явно связан с sysvipc / shm, то логично будет его заменить на... на кого? В коде posix map явно указан как NOT TESTED, так что он отпадает.

Далее в configure можно найти кой что интересное:
5365 echo $ECHO_N "checking for best shared memory type... $ECHO_C" >&6; }
5366 if test "$mm_shm_ipc" = "yes"; then
5367
5368 cat >>confdefs.h <<\_ACEOF 5369 #define MM_SHM_IPC 1 5370 _ACEOF 5371 5372 msg="sysvipc" 5373 elif test "$mm_shm_mmap_anon" = "yes"; then 5374 5375 cat >>confdefs.h <<\_ACEOF 5376 #define MM_SHM_MMAP_ANON 1 5377 _ACEOF 5378 5379 msg="anonymous mmap"



Отсюда следует, что shm_mmap_anon (он же MM_SHM_MMAP_ANON) следующий в списке предпочтений.

Так что делаем следующее:
vi configure


Накатываем патч:

- 5366 if test "$mm_shm_ipc" = "yes"; then
+ 5366 if false; then


Потом перезапускаем configure и получаем все, как надо:

checking for sysvipc shared memory support... yes
checking for mmap shared memory support... yes
checking for mmap on /dev/zero shared memory support... yes
checking for anonymous mmap shared memory support... yes
checking for posix mmap shared memory support... no
checking for best shared memory type... anonymous mmap


То есть, теперь он будет собран с anonymous_mmap и, возможно, прекратит сваливать сервер.

суббота, 29 мая 2010 г.

Скрипт для очистки неиспользуемой shm памяти

Все написанное ниже под большим сомнением, используйте на свой страх и риск :)


Бывает так, что процесс, работающий с shm падает и, разумеется, не успевает освободить блок shm памяти. Поэтому за shm памятью стоит следить и очищать, если находятся не используемые никем блоки. Число процессов, использующих блок shm можно посмотреть в столбце nattach выдачи команды
ipcs -m


А вот скрпит для удаления блоков shm памяти, у которых nattach равно 0.
ipcs -m | grep -v nattch | perl -e 'my $mem = 0; do { my@a=split "\\s+", $_; next if $a[4] or !$a[1]; print "Remove shm block with shmid $a[1] which used by $a[5] processes\n"; $mem+=$a[4]; `ipcrm -m $a[1]`} for<>; $mem /= 1024 for 1..2; print "Totally freed up: $mem mb\n" '

понедельник, 1 февраля 2010 г.

Параметры shm в ядре


/proc/sys/kernel/shmmax - The maximum size of a shared memory segment.
/proc/sys/kernel/shmmni - The maximum number of shared memory segments.
/proc/sys/kernel/shmall - The maximum amount of shared memory that can be allocated (в страницах! страница - 4 кб)


Эти настройки можно очень удобно просмотреть утилитой ipcs:
ipcs -lm

------ Shared Memory Limits --------
max number of segments = 8192
max seg size (kbytes) = 262144
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1


А текущее использование можно посмотреть вот так:
ipcs -um

------ Shared Memory Status --------
segments allocated 450
pages allocated 1605547
pages resident 464458
pages swapped 14
Swap performance: 0 attempts 0 successes


(с) http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp?topic=/com.ibm.mq.amq1ac.doc/lq10410_.htm