CentOS / Apache / httpd dead but subsys locked

https://klimchuk.wordpress.com/2015/09/08/httpd-dead-but-subsys-locked/

Centos 6.x 64 bit, Apache 2.2.15

Probléma:
service httpd status
httpd dead but subsys locked

Megoldás:
for sem in `ipcs -s | awk '{print $2}'`; do ipcrm -s $sem; done

service httpd restart

sleep 1

pgrep -lf httpd

Hozzászólások

Mondjuk azt sose értettem, hogy az ilyen SystemV-IPC-s erőforrások (shm, sem) miért élik túl az utolsó használó processzt... BS2000-ben fejlődött agyamnak az lenne logikus, ha automágikusan eltakarítaná őket a kernel.

System V. Release 4. A "hint"-tel arra próbáltam utalni, hogy az IPC arra van kitalálva, hogy processzek között lehessen egyszerűen kommunikálni. Nomostan ha a létrehozó processz kihalásakor a kernel kipucolná azt, amit ő más folyamatokkal való kommunikációra létrehozott, akkor az a tervezett működéssel erősen szembe menne.
IPC használata esetén tessék úgy megírni a kódot, hogy legyen, aki tudja, hogy mit lehet kitakarítani, és mit nem.

Pont van. Miből gondolod, hogy adott pillanatban bárkinek használnia kell egy IPC erőforrást?
Miből gondolod, hogy nincs olyan use case, ahol alkalmazás elindul, berámol üzenetet MQ-ba, utána kilép, aztán később valami felébred (pl. cron job), és feldolgozza?
Közte nincs felhasználója az erőforrásnak, de mégis van benne fontos adat.

Van amire a fájl is jó, ebben igazad van, de az ipc célja picivel több/más. Hint: fájl létrehozása és abba valamilyen tartalom beleírása hány rendszerhívás? És ugyanez shm használatával? Mindez végrehajtási időben, processz ütemező általi megszakíthatóságban hogy is néz ki?

Igen, nagyon gyors lehet egy memory-only üzenet sor, de miért is indokolja ez az a gyorsaság azt, hogy amikor nem fut senki, akkor is megmaradjon az üzenetsor?

Egyébként engem még mindig inkább a szemafor és főleg az osztott memória zavar: minek megy rájuk az erőforrás, ha egyszer nem használja senki.

> minek megy rájuk az erőforrás, ha egyszer nem használja senki.

Az alkalmazás is tudja magának törölni, ha biztos benne, hogy más már nem akar később hozzáférni. Ha nem teszi meg, az az alkalmazás helytelen működése.

Egyszerűen arról van szó, hogy valahogyan biztosítani akarták, hogy az IPC olyan processzek közt is működhessen, amelyek esetleg nem is ugyanabban az időben működnek.

Az egész sztoriról amúgy beej jókat írogat.
http://beej.us/guide/bgipc/output/html/multipage/shm.html

Természetesen, amit csak egy bizonyos módon lehet használni, azt azon az egy bizonyos módon kell használni, akkor is, ha az kényelmetlen, ügyetlen. Esetünkben: mivel nincs referencia-számlálással egybekötött automatikus felszabadítás (opcionálisan sem), kézileg kell felszabadítani. Aztán ha rosszkor jött a 'kill -9', akkor jöhet az ipcrm(1).

Mondjuk kiváncsi lennék, hogyan kell egy SystemV-s szemafor felszabadítását korrektül megcsinálni, vagyis eldönteni, hogy én vagyok-e az utolsó használója, mert ha igen, akkor jöhet a 'semctl(IPC_RMID)' egyébként viszont nem.

A for-ban levo parancsot ird at erre:


ipcs -s | awk '$2 ~ /^[0-9]/ { print $2 }'

ugyanis igy nem fog raszaladni arra, hogy nincs olyan IPC, hogy "szem.az".
--
Blog | @hron84
Üzemeltető macik

watta pakk

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."