Здравствуйте,
Меня зовут Анатолий Серёгин. Мы решаем проблему с нагрузкой на битрикс 24 клиента.
После обновления модулей при использовании битрикса более чем 400 сотрудниками апач нагружается так, что сервер перестает отвечать на запросы. Примерно раз в час на сервере возникает жесткая нагрузка.
Через трассировки мы выянили, что в это время апач лопатит адресное пространство. Это мы увидели через strace. Во всех процессах сотни записей вида:
Мы отловили, что в начале этих записей идет обращение к файлу /home/bitrix/www/bitrix/managed_cache/MYSQL/orm_b_crm_webfor m/c4/c4d40f79f7207baf8ac211ceaaac509a.php
Вот так выглядит
И потом сотня другая mmap'ов. Во время этих тормозов апач не перезапускается. Он висит. Даже если убить процессы и потом запустить службу, нагрузка возвращается.
Помогает отключение пользователям доступа к порталу. Если nginx погасить - он перед апачем стоит - нагрузка завершается.
Кеш чистили. Модули переставляли. Папку с доработками убирали.
Ошибок при проверке проекта в админке битры нет.
Мы бы отключили кеш вообще, но, как я понял, в битриксе этот кеш не отключается. Или ошибаемся?
Наша конфигурация
Bitrix virtual appliance version 7.5.0
Nginx -> Apache prefork
Версия ядра 21.850.700
Возможно мы что-то простое упускаем. Может быть это что-то очень сложное.
От поддержки вторые сутки тишина. Может задачки испугались.
Может мы клиент неинтересный. Не знаю тогда, кто интересный. Мы на Enterprise лицензии. Это примерно 1 млн. р. в год за лицензию.
Буду благодарен тем, кто поможет решить проблему.
Меня зовут Анатолий Серёгин. Мы решаем проблему с нагрузкой на битрикс 24 клиента.
После обновления модулей при использовании битрикса более чем 400 сотрудниками апач нагружается так, что сервер перестает отвечать на запросы. Примерно раз в час на сервере возникает жесткая нагрузка.
Через трассировки мы выянили, что в это время апач лопатит адресное пространство. Это мы увидели через strace. Во всех процессах сотни записей вида:
| Код |
|---|
munmap(0x2b8d0c200000, 6889472) = 0 mmap(NULL, 6889472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0c092000 munmap(0x2b8d0c092000, 6889472) = 0 mmap(NULL, 8982528, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0c092000 munmap(0x2b8d0c092000, 1499136) = 0 munmap(0x2b8d0c892000, 593920) = 0 munmap(0x2b8d0ba00000, 6889472) = 0 mmap(NULL, 6889472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0ba00000 munmap(0x2b8d0c200000, 6889472) = 0 mmap(NULL, 6889472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0c092000 munmap(0x2b8d0c092000, 6889472) = 0 mmap(NULL, 8982528, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0c092000 munmap(0x2b8d0c092000, 1499136) = 0 munmap(0x2b8d0c892000, 593920) = 0 munmap(0x2b8d0ba00000, 6889472) = 0 mmap(NULL, 6889472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0ba00000 munmap(0x2b8d0c200000, 6889472) = 0 mmap(NULL, 6889472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0c092000 munmap(0x2b8d0c092000, 6889472) = 0 mmap(NULL, 8982528, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0c092000 munmap(0x2b8d0c092000, 1499136) = 0 munmap(0x2b8d0c892000, 593920) = 0 munmap(0x2b8d0ba00000, 6889472) = 0 mmap(NULL, 6889472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0ba00000 munmap(0x2b8d0c200000, 6889472) = 0 mmap(NULL, 6889472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0c092000 munmap(0x2b8d0c092000, 6889472) = 0 mmap(NULL, 8982528, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8d0c092000 munmap(0x2b8d0c092000, 1499136) = 0 munmap(0x2b8d0c892000, 593920) = 0 munmap(0x2b8d0ba00000, 6889472) = 0 |
Мы отловили, что в начале этих записей идет обращение к файлу /home/bitrix/www/bitrix/managed_cache/MYSQL/orm_b_crm_webfor
Вот так выглядит
| Код |
|---|
16:32:39 poll([{fd=17, events=POLLIN|POLLERR|POLLHUP}], 1, 86400000) = 1 ([{fd=17, revents=POLLIN}])
16:32:39 recvfrom(17, "\1\0\0\1\n;\0\0\2\3def\vsitemanager\ncrm_status\fb_crm_status\2ID\2ID\f?\0\22\0\0\0\3\3B\0\0\0I\0\0\3\3def\vsitemanager\ncrm_status\fb_crm_status\tENTITY_ID\tENTITY_ID\f!\0\226\0\0\0\375\1P\0\0\0I\0\0\4\3def\vsitemanager\ncrm_status\fb_crm_status\tSTATUS_ID\tSTATUS_ID\f!\0\226\0\0\0\375\tP\0\0\0?\0\0\5\3def\vsitemanager\ncrm_status\fb_"..., 32768, MSG_DONTWAIT, NULL, NULL) = 1082
16:32:39 sendto(17, "\352\1\0\0\3SELECT \n\t`crm_status`.`ID` AS `ID`,\n\t`crm_status`.`ENTITY_ID` AS `ENTITY_ID`,\n\t`crm_status`.`STATUS_ID` AS `STATUS_ID`,\n\t`crm_status`.`NAME` AS `NAME`,\n\t`crm_status`.`NAME_INIT` AS `NAME_INIT`,\n\t`crm_status`.`SORT` AS `SORT`,\n\t`crm_status`.`SYSTEM` AS"..., 494, MSG_DONTWAIT, NULL, 0) = 494
16:32:39 poll([{fd=17, events=POLLIN|POLLERR|POLLHUP}], 1, 86400000) = 1 ([{fd=17, revents=POLLIN}])
16:32:39 recvfrom(17, "\1\0\0\1\n;\0\0\2\3def\vsitemanager\ncrm_status\fb_crm_status\2ID\2ID\f?\0\22\0\0\0\3\3B\0\0\0I\0\0\3\3def\vsitemanager\ncrm_status\fb_crm_status\tENTITY_ID\tENTITY_ID\f!\0\226\0\0\0\375\1P\0\0\0I\0\0\4\3def\vsitemanager\ncrm_status\fb_crm_status\tSTATUS_ID\tSTATUS_ID\f!\0\226\0\0\0\375\tP\0\0\0?\0\0\5\3def\vsitemanager\ncrm_status\fb_"..., 32768, MSG_DONTWAIT, NULL, NULL) = 4484
16:32:39 sendto(17, "\356\1\0\0\3SELECT \n\t`crm_status`.`ID` AS `ID`,\n\t`crm_status`.`ENTITY_ID` AS `ENTITY_ID`,\n\t`crm_status`.`STATUS_ID` AS `STATUS_ID`,\n\t`crm_status`.`NAME` AS `NAME`,\n\t`crm_status`.`NAME_INIT` AS `NAME_INIT`,\n\t`crm_status`.`SORT` AS `SORT`,\n\t`crm_status`.`SYSTEM` AS"..., 498, MSG_DONTWAIT, NULL, 0) = 498
16:32:39 poll([{fd=17, events=POLLIN|POLLERR|POLLHUP}], 1, 86400000) = 1 ([{fd=17, revents=POLLIN}])
16:32:39 recvfrom(17, "\1\0\0\1\n;\0\0\2\3def\vsitemanager\ncrm_status\fb_crm_status\2ID\2ID\f?\0\22\0\0\0\3\3B\0\0\0I\0\0\3\3def\vsitemanager\ncrm_status\fb_crm_status\tENTITY_ID\tENTITY_ID\f!\0\226\0\0\0\375\1P\0\0\0I\0\0\4\3def\vsitemanager\ncrm_status\fb_crm_status\tSTATUS_ID\tSTATUS_ID\f!\0\226\0\0\0\375\tP\0\0\0?\0\0\5\3def\vsitemanager\ncrm_status\fb_"..., 32768, MSG_DONTWAIT, NULL, NULL) = 1009
16:32:39 access("/home/bitrix/www/local/vendor/composer/. ./nesbot/carbon/src/Bitrix/Crm/WebForm/Manager.php", F_OK) = -1 ENOENT (No such file or directory)
16:32:39 access("/home/bitrix/www/bitrix/modules/crm/lib/webform/manager.php", F_OK) = 0
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lib/webform/manager.php", {st_mode=S_IFREG|0664, st_size=4055, ...}) = 0
16:32:39 access("/home/bitrix/www/local/vendor/composer/. ./nesbot/carbon/src/Bitrix/Crm/WebForm/Internals/FormTable.php", F_OK) = -1 ENOENT (No such file or directory)
16:32:39 access("/home/bitrix/www/bitrix/modules/crm/lib/webform/internals/formtable.php", F_OK) = -1 ENOENT (No such file or directory)
16:32:39 access("/home/bitrix/www/bitrix/modules/crm/lib/WebForm/Internals/FormTable.php", F_OK) = -1 ENOENT (No such file or directory)
16:32:39 access("/home/bitrix/www/bitrix/modules/crm/lib/webform/internals/form.php", F_OK) = 0
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lib/webform/internals/form.php", {st_mode=S_IFREG|0664, st_size=8455, ...}) = 0
16:32:39 lstat("/home/bitrix/www/bitrix/modules/crm/lib/webform/internals/form.php", {st_mode=S_IFREG|0664, st_size=8455, ...}) = 0
16:32:39 lstat("/home/bitrix/www/bitrix/modules/crm/lib/webform/internals", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lib/webform/internals/lang", 0x7fffd49ede00) = -1 ENOENT (No such file or directory)
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lib/webform/lang", 0x7fffd49ede00) = -1 ENOENT (No such file or directory)
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lib/lang", 0x7fffd49ede00) = -1 ENOENT (No such file or directory)
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lang", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
16:32:39 access("/home/bitrix/www/bitrix/modules/crm/lang/ru/lib/webform/internals/form.php", F_OK) = 0
16:32:39 lstat("/home/bitrix/www/bitrix/modules/crm/lang/ru/lib/webform/internals/form.php", {st_mode=S_IFREG|0644, st_size=72, ...}) = 0
16:32:39 lstat("/home/bitrix/www/bitrix/modules/crm/lang/ru/lib/webform/internals", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lang/ru/lib/webform/internals/form.php", {st_mode=S_IFREG|0644, st_size=72, ...}) = 0
16:32:39 access("/home/bitrix/www/local/vendor/composer/. ./nesbot/carbon/src/Bitrix/Crm/WebForm/Entity.php", F_OK) = -1 ENOENT (No such file or directory)
16:32:39 access("/home/bitrix/www/bitrix/modules/crm/lib/webform/entity.php", F_OK) = 0
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lib/webform/entity.php", {st_mode=S_IFREG|0664, st_size=14489, ...}) = 0
16:32:39 access("/home/bitrix/www/local/vendor/composer/. ./nesbot/carbon/src/Bitrix/Crm/WebForm/ResultEntity.php", F_OK) = -1 ENOENT (No such file or directory)
16:32:39 access("/home/bitrix/www/bitrix/modules/crm/lib/webform/resultentity.php", F_OK) = 0
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lib/webform/resultentity.php", {st_mode=S_IFREG|0664, st_size=46762, ...}) = 0
16:32:39 lstat("/home/bitrix/www/bitrix/modules/crm/lib/webform/resultentity.php", {st_mode=S_IFREG|0664, st_size=46762, ...}) = 0
16:32:39 access("/home/bitrix/www/bitrix/modules/crm/lang/ru/lib/webform/resultentity.php", F_OK) = 0
16:32:39 lstat("/home/bitrix/www/bitrix/modules/crm/lang/ru/lib/webform/resultentity.php", {st_mode=S_IFREG|0644, st_size=682, ...}) = 0
16:32:39 stat("/home/bitrix/www/bitrix/modules/crm/lang/ru/lib/webform/resultentity.php", {st_mode=S_IFREG|0644, st_size=682, ...}) = 0
16:32:39 access("/home/bitrix/www/bitrix/managed_cache/MYSQL/orm_b_crm_webform/c4/c4d40f79f7207baf8ac211ceaaac509a.php", F_OK) = 0
16:32:39 lstat("/home/bitrix/www/bitrix/managed_cache/MYSQL/orm_b_crm_webform/c4/c4d40f79f7207baf8ac211ceaaac509a.php", {st_mode=S_IFREG|0664, st_size=10449700, ...}) = 0
16:32:39 lstat("/home/bitrix/www/bitrix/managed_cache/MYSQL/orm_b_crm_webform/c4", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
16:32:39 lstat("/home/bitrix/www/bitrix/managed_cache/MYSQL/orm_b_crm_webform", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
16:32:39 open("/home/bitrix/www/bitrix/managed_cache/MYSQL/orm_b_crm_webform/c4/c4d40f79f7207baf8ac211ceaaac509a.php", O_RDONLY) = 18
16:32:39 fstat(18, {st_mode=S_IFREG|0664, st_size=10449700, ...}) = 0
16:32:39 mmap(NULL, 10452992, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b25bd600000
16:32:39 read(18, "<?\nif($INCLUDE_FROM_CACHE!='Y')return false;\n$datecreate = '001637155919';\n$dateexpire = '001637159519';\n$ser_content = 'a:2:{s:7:\"CONTENT\";s:0:\"\";s:4:\"VARS\";a:4595:{i:0;a:42:{s:2:\"ID\";s:1:\"1\";s:4:\"CODE\";s:19:\"1_kontaktnye_dannye\";s:11:\"DATE_CREATE\";O:25:\""..., 10449700) = 10449700
16:32:39 mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b25bbca0000
16:32:39 munmap(0x2b25bbca0000, 2097152) = 0
16:32:39 mmap(NULL, 4190208, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b25bdff8000
16:32:39 munmap(0x2b25bdff8000, 32768) = 0
16:32:39 munmap(0x2b25be200000, 2060288) = 0
16:32:39 mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b25bbca0000
|
Помогает отключение пользователям доступа к порталу. Если nginx погасить - он перед апачем стоит - нагрузка завершается.
Кеш чистили. Модули переставляли. Папку с доработками убирали.
Ошибок при проверке проекта в админке битры нет.
Мы бы отключили кеш вообще, но, как я понял, в битриксе этот кеш не отключается. Или ошибаемся?
Наша конфигурация
Bitrix virtual appliance version 7.5.0
Nginx -> Apache prefork
Версия ядра 21.850.700
Возможно мы что-то простое упускаем. Может быть это что-то очень сложное.
От поддержки вторые сутки тишина. Может задачки испугались.
Может мы клиент неинтересный. Не знаю тогда, кто интересный. Мы на Enterprise лицензии. Это примерно 1 млн. р. в год за лицензию.
Буду благодарен тем, кто поможет решить проблему.