Мой процесс php-fpm сталкивается с проблемами производительности в Ubuntu 14.04 LTS (сервер Nginx, база данных MariaDB).
strace -f $(pidof php-fpm7.1 | sed 's/\([0-9]*\)/\-p \1/g')
Дал мне
<... epoll_wait resumed> {}, 1, 1000) = 0
[pid 32533] epoll_wait(8, {}, 1, 103) = 0
[pid 32533] epoll_wait(8, <unfinished ...>
[pid 32535] mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd933fdd000
[pid 32535] munmap(0x7fd933fdd000, 2097152) = 0
[pid 32535] mmap(NULL, 4190208, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd933dde000
[pid 32535] munmap(0x7fd933dde000, 139264) = 0
[pid 32535] munmap(0x7fd934000000, 1953792) = 0
[pid 32535] madvise(0x7fd933e00000, 2097152, MADV_HUGEPAGE) = 0
[pid 32533] <... epoll_wait resumed> {}, 1, 897) = 0
[pid 32533] epoll_wait(8, {}, 1, 1000) = 0
[pid 32533] epoll_wait(8, {}, 1, 1000) = 0
[pid 32533] epoll_wait(8, <unfinished ...>
[pid 32535] mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd933c00000
[pid 32535] madvise(0x7fd933c00000, 2097152, MADV_HUGEPAGE) = 0
[pid 32533] <... epoll_wait resumed> {}, 1, 1000) = 0
[pid 32533] epoll_wait(8, {}, 1, 1000) = 0
[pid 32533] epoll_wait(8, {}, 1, 1000) = 0
[pid 32533] epoll_wait(8, {}, 1, 1000) = 0
[pid 32533] epoll_wait(8, <unfinished ...>
[pid 32535] mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd933a00000
[pid 32535] madvise(0x7fd933a00000, 2097152, MADV_HUGEPAGE) = 0
[pid 32533] <... epoll_wait resumed> {}, 1, 1000) = 0
[pid 32533] epoll_wait(8, <unfinished ...>
[pid 32535] open("/usr/share/zoneinfo/UTC", O_RDONLY) = 7
[pid 32535] fstat(7, {st_mode=S_IFREG|0644, st_size=118, ...}) = 0
[pid 32535] read(7, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 20) = 20
[pid 32535] lseek(7, 0, SEEK_SET) = 0
[pid 32535] mmap(NULL, 118, PROT_READ, MAP_SHARED, 7, 0) = 0x7fd946835000
[pid 32535] close(7) = 0
[pid 32535] munmap(0x7fd946835000, 118) = 0
[pid 32535] pwrite(5, "_sf2_attributes|a:2:{s:14:\"_secu"..., 979, 0) = 979
[pid 32535] close(5) = 0
[pid 32535] mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd933200000
[pid 32535] madvise(0x7fd933200000, 2097152, MADV_HUGEPAGE) = 0
Я пробовал с php-fpm7.0, PHPMod7.1, но те же проблемы.
CPU загружен до 100% на запросах с небольшим объемом данных.
Конфигурации являются стандартными.
На дублированном экземпляре php5.6-fpm работает хорошо.
Изменить: возможно связанный скрипт PHP продолжает выполнять mmap/munmap
Изменить: я пытался включить огромные страницы https://wiki.debian.org/Hugepages. cat /proc/meminfo | grep Huge
дал мне
AnonHugePages: 108544 kB
HugePages_Total: 512
HugePages_Free: 497
HugePages_Rsvd: 50
HugePages_Surp: 0
Hugepagesize: 2048 kB
но все та же проблема.
Редактировать: я пытался включить/отключить OPCache, также установить opcache.huge_code_pages=0
, безрезультатно. На http://php.net/ нет документации об огромных страницах.
mmap()
/munmap()
напрямую или черезmalloc()
/free()
? Если это черезmalloc()
/free()
, вы можете попробовать установить переменную средыM_MMAP_THRESHOLD
на эквивалент чего-то вроде 4 МБ или 8 МБ, чтобы процесс использовал обычную память кучи для выделений 2 МБ, которые вы видите. Подробнее см. справочную страницуmallopt()
. - person Andrew Henle   schedule 06.09.2017mmap
/munmap()
напрямую. - person Etienne Gautier   schedule 06.09.2017void *
кunsigned long
, чтобы попытаться выровнять полученный указатель.void *
не обязательно соответствуетlong
. Например, связанный код не будет работать в 64-битной Windows, что вряд ли является необычной платформой. См. en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models - person Andrew Henle   schedule 06.09.2017