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 Групповое закрытие решённых. |