Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: падение мастер процесса
2012/5/16 Maxim Dounin <mdounin@xxxxxxxxxx>:
> Hello!
>
> On Wed, May 16, 2012 at 01:56:27PM +0300, Polonevich Ivan wrote:
>
>> С коллегами сделали такие выводы:
>>
>> в функции ngx_shmtx_force_unlock выполняется операция atomic_cmp_set
>> без предварительной проверки инициализирован ли mtx->lock или нет. Таким
>> образом если модуль выделил шаред память классическим способом но не
>> использовал mutex локи для этого блока то они остаются
>> неинициализрованными и при операции unlock_mutexes вызываемой по команде
>> reload мы получаем segmetation_fault. добавил проверку на то
>> инициализирован ли вообще mtx-lock, это снимает проблему. Насколько это
>> корректно или надо править модуль. Ниже диф:
>
> Это неправильные выводы.
>
> При выделении разделяемой памяти через ngx_shared_memory_add()
> соответствующий lock инициализируется (см. ngx_init_zone_pool()),
> однако ustats выделенную под zone pool память (и в том числе lock)
> затирает и использует под свои нужды.
>
> Ну и предложенный патч на ngx_shmtx.c по очевидным причинам проблему
> не вылечит, а спрячет - падать не будет ровно до того момента, как
> в соответствующую область памяти не запишут что-то, отличное от
> NULL.
>
> Maxim Dounin
>
>> [root@build-server nginx-1.3.0]# [root@build-server d]# diff ngx_shmtx.c
>> ngx_shmtx_patched.c
>> 154c154
>> < if (ngx_atomic_cmp_set(mtx->lock, pid, 0)) {
>> ---
>> > if (mtx->lock ? ngx_atomic_cmp_set(mtx->lock, pid, 0): 0) {
>>
>> On 5/11/12 1:14 PM, Ivan Palanevich wrote:
>> > Вероятно вы правы.
>> >
>> > http://code.google.com/p/ustats/issues/detail?id=5
>> >
>> > On May 11, 2012, at 10:22 AM, Maxim Dounin wrote:
>> >
>> >> Hello!
>> >>
>> >> On Thu, May 10, 2012 at 08:36:06PM +0300, Ivan Palanevich wrote:
>> >>
>> >>> Заметил, что падает мастер процесс при отправке -HUP,
>> >>>
>> >>> cat /etc/redhat-release
>> >>> CentOS release 5.8 (Final)
>> >>>
>> >>> Linux server 2.6.18-308.4.1.el5 #1 SMP Tue Apr 17 17:08:00 EDT 2012
>> >>> x86_64 x86_64 x86_64 GNU/Linux
>> >>>
>> >>> nginx -V
>> >>> nginx version: nginx/1.2.0
>> >>> built by gcc 4.1.2 20080704 (Red Hat 4.1.2-52)
>> >>> TLS SNI support enabled
>> >>> configure arguments: --user=nginx --group=nginx
>> >>> --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx
>> >>> --conf-path=/etc/nginx/nginx.conf
>> >>> --error-log-path=/var/log/nginx/error.log
>> >>> --http-log-path=/var/log/nginx/access.log
>> >>> --http-client-body-temp-path=/var/lib/nginx/tmp/client_body
>> >>> --http-proxy-temp-path=/var/lib/nginx/tmp/proxy
>> >>> --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi
>> >>> --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx
>> >>> --with-openssl=/home/mockbuild/rpmbuild/BUILD/nginx-1.2.0/openssl-0.9.8t/
>> >>> --with-openssl-opt=enable-tlsext --with-http_secure_link_module
>> >>> --with-http_random_index_module --with-http_ssl_module
>> >>> --with-http_realip_module --with-http_addition_module
>> >>> --with-http_sub_module --with-http_dav_module
>> >>> --with-http_gzip_static_module --with-http_stub_status_module
>> >>> --with-http_perl_module --with-http_geoip_module --with-debug
>> >>> --with-ipv6 --with-file-aio --with-cc-opt='-O2 -g -pipe -Wall
>> >>> -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
>> >>> --param=ssp-buffer-size=4 -m64 -mtune=generic'
>> >>> --add-module=/home/mockbuild/rpmbuild/BUILD/nginx-1.2.0/nginx-upstream-fair
>> >>> --add-module=/home/mockbuild/rpmbuild/BUILD/nginx-1.2.0/mod_ustats
>> >>>
>> >>> Из последних добавленных модификаций
>> >>> --with-openssl=/home/mockbuild/rpmbuild/BUILD/nginx-1.2.0/openssl-0.9.8t/
>> >>>
>> >>> Началось до 1.2.0 , но с какой точно версии не помню.
>> >> [...]
>> >>
>> >>> Подскажите куда покапать.
>> >> Начать с простого: собраться без сторонних модулей и патчей, и
>> >> попробовать воспроизвести проблему без них. Я подозреваю, что
>> >> проблема где-то в районе ustats.
>> >>
>> >> Maxim Dounin
>> >>
>> >> _______________________________________________
>> >> nginx-ru mailing list
>> >> nginx-ru@xxxxxxxxx
>> >> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>
>>
>> --
>> Signed, Polonevich Ivan
>> System Administrator
>> CООО Гейм Стрим / Wargaming.net
>> http://www.wargaming.net/
>> http://www.game-stream.org/
>> icq 8158401
>> Skype jonilover
>>
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru@xxxxxxxxx
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@xxxxxxxxx
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
Получились следующие патчи. На первый взгляд они решают наши проблемы,
но т.к. автор недоступен, просьба прокомментировать - все ли хорошо в
них. Диффы в аттаче.
Спасибо.
--
Best regards,
Vasil Mikhalenya
Attachment:
nginx_ustats.patch.diff
Description: Binary data
Attachment:
ngx_http_ustats_module.c.diff
Description: Binary data
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|