| Summary: | Включить core dump для процессов apache | ||
|---|---|---|---|
| Product: | [Инфраструктура (Infrastructure)] Хостинг | Reporter: | Vitaly Lipatov <lav> |
| Component: | Apache | Assignee: | Vitaly Lipatov <lav> |
| Status: | CLOSED FIXED | QA Contact: | |
| Severity: | minor | ||
| Priority: | P4 | CC: | anton |
| Version: | не указана | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Заявки RT: | Связано с: | ||
| Дата напоминания: | |||
| Bug Depends on: | |||
| Bug Blocks: | 10883 | ||
|
Description
Vitaly Lipatov
2015-10-22 12:03:16 MSK
Через strace видно, что кто-то безуспешно вызывает
[pid 22059] prlimit64(0, RLIMIT_CORE, NULL, 0xbfc98d20) = -1 ENOSYS (Function not implemented)
[pid 22059] ugetrlimit(RLIMIT_CORE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
[pid 22059] prlimit64(0, RLIMIT_CORE, NULL, 0xbfc98d80) = -1 ENOSYS (Function not implemented)
[pid 22059] ugetrlimit(RLIMIT_CORE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
[pid 22059] prlimit64(0, RLIMIT_CORE, {rlim_cur=RLIM64_INFINITY, rlim_max=RLIM64_INFINITY}, NULL) = -1 ENOSYS (Function not implemented)
[pid 22059] setrlimit(RLIMIT_CORE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
При этом удобный вызов prlimit не реализован в ядре:
# strace -f prlimit -p 22471 -c
prlimit64(22471, RLIMIT_CORE, NULL, 0xa0053c0) = -1 ENOSYS (Function not implemented)
write(2, "prlimit: ", 9prlimit: ) = 9
write(2, "failed to get the CORE resource "..., 37failed to get the CORE resource limit) = 37
strace по ulimit -c показал такой вариант:
prlimit64(0, RLIMIT_CORE, NULL, 0xbfd1b800) = -1 ENOSYS (Function not implemented)
ugetrlimit(RLIMIT_CORE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
write(1, "unlimited\n", 10)
Ну это ладно,
VERSIONS
The prlimit() system call is available since Linux 2.6.36. Library support is available since glibc 2.13.
getrlimit/setrlimit есть давно.
В итоге видим:
# grep RLIMIT_CORE zz1 | grep setr
[pid 22059] setrlimit(RLIMIT_CORE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
[pid 22071] setrlimit(RLIMIT_CORE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
[pid 22096] setrlimit(RLIMIT_CORE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
[pid 22096] setrlimit(RLIMIT_CORE, {rlim_cur=0, rlim_max=RLIM_INFINITY}) = 0
В хост-системе вызов так же не поддерживается:
[root@azbyka ~]# prlimit
prlimit: failed to get the AS resource limit: Функция не реализована
В исходном коде Apache и apr1 не удалось обнаружить выставления RLIMIT_CORE.
В suhosin параметр suhosin.coredump = On лишь организует SegFault при ошибке:
<------>/* dump core if wanted */
<------>if (SUHOSIN_G(coredump) && loglevel == S_MEMORY) {
<------><------>volatile unsigned int *x = 0;
<------><------>volatile int y = *x;
<------>}
Написал в рассылку devel@lists.altlinux.org Получил правильный совет https://lists.altlinux.org/pipermail/sysadmins/2014-June/036782.html и описал на wiki https://www.altlinux.org/Apache2/Coredump Групповое закрытие решённых. |