Здравствуйте, товарищи!
На Linux системе с процессором ARM успешно подняли сервер nginx. Есть
необходимость запускать на ней cgi(или fcgi, не знаю, как правильно)
скрипты. Для этих целей с просторов интернета был стянут, так
называемый, fcgi сервер(опять же, я не уверен в терминологии) -
приложение, которое слушает порт и запускает запрошенные скрипты. Дело в
том, что каждый раз при запросе скрипта worker process падает, и
оставляет соответствующее сообщение в логе nginx. С точно такой же
конфигурацией, fcgi сервером, nginx'ом и скриптами все было опробовано
на системе x86 Ubuntu, и там все работало замечательно. ARM'овая машина
отличается тем, что у нее библиотеки и компилятор (gcc 3.4.3) не первой
свежести. Я стал смотреть отладчиком, что делает worker process. При
запуске скрипта он падает постоянно в одном и том же месте. Пробовали
это на последней стабильной версии и на последней текущей.
Вот лог:
GNU gdb 6.3 (MontaVista 6.3-20.0.66.0600975 2006-07-05)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "armv5tl-montavista-linuxeabi".
(gdb) attach 3541
Attaching to process 3541
Reading symbols from /usr/local/nginx/sbin/nginx...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
Reading symbols from /lib/tls/libcrypt.so.1...Reading symbols from
/usr/lib/debug/lib/tls/libcrypt-2.3.3.so.debug...done.
done.
Loaded symbols for /lib/tls/libcrypt.so.1
Reading symbols from /lib/libpcre.so.0...Reading symbols from
/usr/lib/debug/lib/libpcre.so.0.0.1.debug...done.
done.
Loaded symbols for /lib/libpcre.so.0
Reading symbols from /usr/lib/libz.so.1...Reading symbols from
/usr/lib/debug/usr/lib/libz.so.1.2.1.1.debug...done.
done.
Loaded symbols for /usr/lib/libz.so.1
Reading symbols from /lib/tls/libc.so.6...Reading symbols from
/usr/lib/debug/lib/tls/libc-2.3.3.so.debug...done.
done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/ld-linux.so.3...Reading symbols from
/usr/lib/debug/lib/ld-2.3.3.so.debug...done.
done.
Loaded symbols for /lib/ld-linux.so.3
Reading symbols from /lib/tls/libnss_files.so.2...Reading symbols from
/usr/lib/debug/lib/tls/libnss_files-2.3.3.so.debug...done.
done.
Loaded symbols for /lib/tls/libnss_files.so.2
0x401306d4 in epoll_wait () from /lib/tls/libc.so.6
(gdb) step
Single stepping until exit from function epoll_wait,
which has no line number information.
0x40093640 in __syscall_error () from /lib/tls/libc.so.6
(gdb) step
Single stepping until exit from function __syscall_error,
which has no line number information.
0x40093644 in __syscall_error_1 () from /lib/tls/libc.so.6
(gdb) step
Single stepping until exit from function __syscall_error_1,
which has no line number information.
> [Здесь отладчик "замерзает". Видимо идет ожидание события в nginx. В
этот момент я запускаю cgi скрипт.]
Program received signal SIGSEGV, Segmentation fault.
ngx_epoll_process_events (cycle=0x845ec, timer=706204, flags=1)
at src/event/modules/ngx_epoll_module.c:452
452 rev = c->read;
(gdb)
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.