Bug 26892

Summary: Не совпадает имя в списке процессов: /usr/sbin/httpd вместо httpd2
Product: Sisyphus Reporter: solo <solo>
Component: apache2-mod_perlAssignee: Nikolay A. Fetisov <naf>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: critical    
Priority: P3 CC: at, lav, mike, naf, sysadmin, thecrux
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://lists.altlinux.org/pipermail/sisyphus/2012-February/356743.html
Bug Depends on:    
Bug Blocks: 27924    

Description solo 2012-02-04 23:03:35 MSK
При использовании apache2-mod_perl-2.0.5-alt2 совместно с apache2-2.2.22-alt1 при старте httpd2 (на этапе загрузки mod_perl) в /var/log/httpd2/error_log наблюдается следующая ошибка:

Attempt to free unreferenced scalar: SV 0x8dff48, Perl interpreter: 0x8c08b0 during global destruction.

  При этом процессы httpd2 остаются запущенными, но наблюдаются следующие эффекты:

1. Невозможно получить статус httpd2:

$ sudo -H service httpd2 status
httpd2 is dead, but stale PID file exists

2. Невозможно штатно погасить демона:

$ sudo -H service httpd2 stop
Service httpd2 is not running.    [PASSED]

Хотя процессы запущены:

$ sudo -H ps ax|fgrep httpd
16237 ?        Ss     0:00 /usr/sbin/httpd2
16246 ?        S      0:00 /usr/sbin/httpd2
16247 ?        S      0:00 /usr/sbin/httpd2
16248 ?        S      0:00 /usr/sbin/httpd2
16249 ?        S      0:00 /usr/sbin/httpd2
16250 ?        S      0:00 /usr/sbin/httpd2
16257 ?        S      0:00 /usr/sbin/httpd2

3. Не работает killall (процессы по прежнему в памяти):

$ sudo -H killall httpd2
httpd2: no process killed

4. Имя процесса в /proc/<pid>/stat и /proc/<pid>/comm (на ядрах его предоставляющих) отличается от имени процесса в /proc/<pid>/cmdline:

$ cat /proc/$(pidof -s httpd2)/stat
16257 (/usr/sbin/httpd) S 16237 16237 16237 0 -1 4202816 262 0 0 0 0 0 0 0 20 0 1 0 277393376 245813248 2739 18446744073709551615 4194304 4638500 0 0 0 0 0 4096 134235883 18446744073709551615 0 0 17 0 0 0 0 0 0

(При этом файл /usr/sbin/httpd на данном хосте отсутствует.)

$ cat /proc/$(pidof -s httpd2)/comm
httpd

$ cat /proc/$(pidof -s httpd2)/cmdline
/usr/sbin/httpd2

  При этом, комбинация из apache2-2.2.22-alt1 и apache2-mod_perl-2.0.4-alt1.1 данных проблем не вызывает.

  Гугление показало, что подобные проблемы (как минимум сообщение в логе при использовании mod_perl-2.0.5 собранным с perl-5.14) есть не только у нас, см.:

1. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=650675

2. http://article.gmane.org/gmane.comp.apache.mod-perl.devel/9928
Comment 1 solo 2012-02-07 23:32:30 MSK
  Судя по дате http://lists.altlinux.org/pipermail/sisyphus/2012-January/356606.html данная проблема первый раз выплыла когда в Сизифе был ещё apache2-2.2.21-alt1, но уже apache2-mod_perl-2.0.5-alt2.
Comment 2 Nikolay A. Fetisov 2012-11-06 16:04:46 MSK
К "Attempt to free unreferenced scalar" описанная проблема с запуском 
Apache2 + mod_perl (замена на этапе запуска mod_perl имени процесса httpd)
отношения не имеет.

В целом, есть подозрение, что и к mod_perl'у оно отношения не имеет, скорее
к apr1 / apr1utils. И является следствием использования у нас в целях 
обеспечения совместной работы с Apache 1.3.x нестандартного имени процесса 
Apache 2.x - httpd2 .


Просьба проверить - на текущих сборках apache2-base-2.2.22-alt11 / 
apache2-mod_perl-2.0.7-alt2 у меня оно воспроизводится перестало (без
каких-либо изменений в mod_perl). Т.е., с включённым mod_perl 
service httpd2 start/stop/status
выполняются без ошибок.
Comment 3 Vitaly Lipatov 2012-12-06 12:55:44 MSK
(В ответ на комментарий №2)
> К "Attempt to free unreferenced scalar" описанная проблема с запуском 
> Apache2 + mod_perl (замена на этапе запуска mod_perl имени процесса httpd)
> отношения не имеет.
> 
> В целом, есть подозрение, что и к mod_perl'у оно отношения не имеет, скорее
> к apr1 / apr1utils. И является следствием использования у нас в целях 
> обеспечения совместной работы с Apache 1.3.x нестандартного имени процесса 
> Apache 2.x - httpd2 .
> 
> 
> Просьба проверить - на текущих сборках apache2-base-2.2.22-alt11 / 
> apache2-mod_perl-2.0.7-alt2 у меня оно воспроизводится перестало (без
> каких-либо изменений в mod_perl). Т.е., с включённым mod_perl 
> service httpd2 start/stop/status
> выполняются без ошибок.
Нет, всё по-прежнему с apache2 2.2.22-alt11 (после a2dismod perl нормально запускается)

Но никакого "Attempt to free unreferenced scalar" в логах нет.
Comment 4 Vitaly Lipatov 2012-12-06 13:16:44 MSK
*** Bug 28188 has been marked as a duplicate of this bug. ***
Comment 5 Nikolay A. Fetisov 2012-12-13 18:22:19 MSK
*** Bug 28220 has been marked as a duplicate of this bug. ***
Comment 6 Nikolay A. Fetisov 2012-12-16 23:26:04 MSK
Это не mod_perl, это сам Perl, которому в коммите 7636ea95 расширили 
функциональность: http://perl5.git.perl.org/perl.git/commit/7636ea95c5776293
В Sisyphus это изменение пришло с Perl 5.14.2. 

При задании $0 сейчас дополнительно вызывается prctl(PR_SET_NAME, ...),
который изменяет имя текущего процесса на строку длиной не более 16 символов.
У наших сборок Apache2 имя /usr/sbin/httpd2 чуть длинее.

Соответственно, в t6:
$ perl -e '$0="/usr/sbin/httpd2"; system "ps h $$;ps hc $$"'
12007 pts/1    S+     0:00 /usr/sbin/httpd2
12007 pts/1    S+     0:00 perl

В Sisyphus:
$ perl -e '$0="/usr/sbin/httpd2"; system "ps h $$;ps hc $$"'
13282 pts/1    S+     0:00 /usr/sbin/httpd2
13282 pts/1    S+     0:00 /usr/sbin/httpd
Comment 7 Repository Robot 2012-12-16 23:42:01 MSK
apache2-mod_perl-2.0.7-alt4 -> sisyphus:

* Sun Dec 16 2012 Nikolay A. Fetisov <naf@altlinux> 2.0.7-alt4
- Disable changing the proctitle (Closes: #26892, #27924)