apache20+freebsd70 graceful seg. violation

Marian Cerny jojo at matfyz.cz
Sun May 11 13:14:16 CEST 2008


Zdravim,

On 2008-05-11 01:26 +0200, michal_sjx wrote:
> Xeon quad, FreeBSD 7.0-STABLE i386, Apache-2.0.63
> 
> # apachectl -k graceful
> nebo # /usr/local/etc/rc.d/apache2 reload
> 
> vyvola signal 11. Pri debugu core souboru je na stacku neco s pthread, 
> ale tomu uz moc nerozumim/nevim co s tim.

my tu mame Core 2 Duo/Quad, apache-2.0.59/63, FreeBSD 6.2/6.3. Problem s
reloadom nemam. Ale pouzivam perfork MPM. Worker MPM som skusal, ale
boli s nim problemy. Teda samotny apache bol v pohode, ale problemy boli
v kombinacii s PHP. Je tam uz principialny problem, ak niektore vlakno
spravi neplatny pristup do pameti, tak spadne cely apache.

> (gdb) bt
> #0  0x28f63d90 in ?? ()
> #1  0x28323e8e in _pthread_main_np () from /lib/libc.so.7
> #2  0x282dc53c in __res_state () from /lib/libc.so.7
> #3  0x28305c87 in __h_errno () from /lib/libc.so.7
> #4  0x28212f58 in apr_getnameinfo () from /usr/local/lib/apache2/libapr-0.so.9
> #5  0x0806d47e in ap_fini_vhost_config ()
> #6  0x0806c017 in main ()

Ten backtrace je pri kazdom restarte rovnaky? Pretoze ja som mal celkom
problemy s analyzovanim multivlaknovych procesov - myslim, ze bolo
potrebne sa najprv prepnut na spravne vlakno a tam pozriet backtrace.

V pripade, ze je toto to miesto, kde to pada, tak moze byt problem
niekde s konfiguraciou. ap_fini_vhost_config() by sa vola po tom, co
boli nacitane konfiguracne subory. Vytvara to nejake tabulky pre vhosty.
Takze by si mohol skusit nejake vhosty zakomentovat, ci to bude robit aj
tak. Tiez mozes skusit pustit testy konfigurakov httpd -t alebo -S. Pri
starte alebo restarte to nic podozrive nevypise do logov?

> A pokud se to nikomu nestava, prosil bych o radu co s tim mohu udelat 
> (krome scriptu na znovuspusteni ;) ). Tento pad se vyvolava napriklad 
> rotovanim logu, kde je nastaven -HUP na rodicovsky proces apache.

Mozno ze je cast apache nejako divne skompilovana. Mohol by si vyskusat
prekompilovat vsetky porty, ktore ktore zavisia na apachovi, alebo na
ktorych zavisi apache:

	portupgrade -Rf apache\*
	portupgrade -rf apache\*

Tiez mozes skusit prekompilovat apache s debug informaciami (asi
najlepsie WITH_DEBUG). Ja bezne prekladam apache takto:

	# Apache
	WITH_MPM = prefork
	WITH_PROXY_MODULES = YES
	WITH_KQUEUE_SUPPORT = YES
	#WITH_DEBUG=YES

	# ak spadne apache, chceme vediet preco
	.if ${.CURDIR} == "/usr/ports/www/apache20"
	CFLAGS += "-g"
	STRIP =
	.endif

	# apache vecsinou pada niekde v php, chceme vediet preco
	.if ${.CURDIR} == "/usr/ports/lang/php5"
	CFLAGS += "-g"
	STRIP =
	.endif

Tiez mozes skusit perfork namiesto worker MPM.

Marian



More information about the Users-l mailing list