За последние 24 часа нас посетили 22362 программиста и 996 роботов. Сейчас ищут 698 программистов ...

Зависает PHP-FMP

Тема в разделе "PHP для профи", создана пользователем AlexandrKulik, 1 мар 2019.

  1. AlexandrKulik

    AlexandrKulik Новичок

    С нами с:
    16 фев 2019
    Сообщения:
    14
    Симпатии:
    0
    Есть VPS 3Gb оперативной 40Gb дист база MariaDB. Работает на NGINX+PHP-FPM 7
    Проблема в следующем, сайт работает какое то время нормально шустро, каждый раз по разному, может два дня может 20 минут и потом при заходе на него не грузится и ошибок не пишет, крутится загрузка в браузере как будто ожидает чего то. При этом когда вот так висит по ресурсам оперативы свободной еще 2Gb процессоры не загружены там загрузка на 8-10% место на диске есть, все службы нормально работают и даже при этом демоны свои которые на PHP работают и создают свои процессы которые за 5-10 сек выполняются в фоне все но при заходе с сайта ничего не грузит, уже не знаю в какую сторону смотреть копать

    Код (Text):
    1. [mysqld]
    2. performance_schema = off
    3. collation-server = utf8_general_ci
    4. character-set-server = utf8
    5. local-infile=0
    6. innodb_file_per_table = 1
    7. pid-file = /var/run/mysqld/mysqld.pid
    8. datadir=/var/lib/mysql
    9. socket=/var/lib/mysql/mysql.sock
    10. # Disabling symbolic-links is recommended to prevent assorted security risks
    11. symbolic-links=0
    12. #bind-address = 127.0.0.1
    13. # Settings user and group are ignored when systemd is used.
    14. # If you need to run mysqld under a different user or group,
    15. # customize your systemd unit file for mariadb according to the
    16. # instructions in http://fedoraproject.org/wiki/Systemd
    17. max_allowed_packet=100M
    18. key_buffer_size = 16M
    19. innodb_buffer_pool_size = 1524M
    20. innodb_flush_log_at_trx_commit = 0
    21. innodb_flush_method = O_DIRECT
    22. thread_cache_size = 16M
    23. query_cache_size = 0
    24. sort_buffer_size = 4M
    25. read_rnd_buffer_size = 512K
    26. table_open_cache = 500
    27. query_cache_limit = 4M
    28. event-scheduler = OFF
    29. max_connections = 100
    30. max_connect_errors = 10000
    31. #interactive_timeout = 100
    32. #wait_timeout = 50
    33. connect_timeout = 10
    34.  
    35. [mysqld_safe]
    36. log-error=/var/log/mariadb/mariadb.log
    37. pid-file=/var/run/mariadb/mariadb.pid
    38.  
    39. #
    40. # include all files from the config directory
    41. #
    42. !includedir /etc/my.cnf.d
    PHP-FPM
    Код (Text):
    1. [rkoffice]
    2. pm = dynamic
    3. pm.start_servers = 5
    4. pm.min_spare_servers = 5
    5. pm.max_spare_servers = 5
    6. pm.max_children = 50
    7. pm.max_requests = 500
    8. pm.process_idle_timeout = 10s
    9. php_admin_value[error_reporting] = E_ALL & ~E_NOTICE
    10. php_admin_value[display_errors] = stderr
    11. php_admin_value[log_errors] = On
    12. php_admin_value[mbstring.func_overload] = 0
    13. listen = /var/www/php-fpm/rkoffice.sock
    14. listen.mode = 0660
    15. listen.owner = rkoffice
    16. listen.group = apache
    17. user = rkoffice
    18. group = rkoffice
    19. chdir = /
    20. php_admin_value[upload_tmp_dir] = /var/www/rkoffice/data/mod-tmp
    21. php_admin_value[session.save_path] = /var/www/rkoffice/data/mod-tmp
    NGINX
    Код (Text):
    1.  
    2. user  apache;
    3. worker_processes  2;
    4. #worker_priority -5;
    5. worker_rlimit_nofile 163840;
    6.  
    7. error_log  /var/log/nginx/error.log warn;
    8. pid        /var/run/nginx.pid;
    9.  
    10.  
    11. events {
    12.     use epoll;
    13.     worker_connections  4000;
    14.     multi_accept on;
    15. }
    16.  
    17.  
    18. http {
    19.     include       /etc/nginx/mime.types;
    20.     default_type  application/octet-stream;
    21.  
    22.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    23.                       '$status $body_bytes_sent "$http_referer" '
    24.                       '"$http_user_agent" "$http_x_forwarded_for"';
    25.  
    26.     access_log  /var/log/nginx/access.log  main;
    27.     set_real_ip_from  127.0.0.1;
    28.     sendfile        on;
    29.     tcp_nopush on;
    30.     tcp_nodelay on;
    31.     types_hash_max_size 2048;
    32.     client_body_buffer_size 4K;
    33.         client_header_buffer_size 4k;
    34.         fastcgi_buffers 64 4K;
    35.         large_client_header_buffers 8 32k;
    36.         client_body_timeout   10;
    37.         client_header_timeout 10;
    38.         keepalive_timeout     10;
    39.         send_timeout          10;
    40.         reset_timedout_connection on;
    41.         server_names_hash_bucket_size 64;
    42.         server_tokens off;
    43.         gzip  on;
    44.         gzip_static on;
    45.         gzip_min_length 1100;
    46.         gzip_buffers 64 8k;
    47.         gzip_comp_level 3;
    48.         gzip_http_version 1.1;
    49.         gzip_proxied any;
    50.         gzip_types text/plain application/xml application/x-javascript text/css;
    51.         proxy_connect_timeout  600s;
    52.         proxy_send_timeout  600s;
    53.         proxy_read_timeout  600s;
    54.         fastcgi_send_timeout 600s;
    55.         fastcgi_read_timeout 600s;
    56.         server_name_in_redirect off;
    57.  
    58.     include /etc/nginx/conf.d/*.conf;
    59.     include /etc/nginx/vhosts/*/*.conf;
    60. server {
    61.         server_name localhost;
    62. disable_symlinks if_not_owner;
    63.     listen 80;
    64.     include /etc/nginx/vhosts-includes/*.conf;
    65.     location @fallback {
    66.         error_log /dev/null crit;
    67.         proxy_pass http://127.0.0.1:8080;
    68.         proxy_redirect http://127.0.0.1:8080 /;
    69.         proxy_set_header Host $host;
    70.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    71.         proxy_set_header X-Forwarded-Proto $scheme;
    72.         access_log off ;
    73.         client_max_body_size 1024m;
    74.         client_body_buffer_size 128k;
    75.     }
    76.     }
    77.     client_max_body_size 1024m;
    78. }
    Помогите советом
     
  2. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Нужно смотреть логи и искать причину глюков.
    Возможно оперативки недостаточно и она просто вся занята спустя промежуток времени.

    Временно, чтобы сайт продолжал свою работу, предлагаю с какой-то периодичностью просто перезапускать php.
     
    Fell-x27 нравится это.
  3. AlexandrKulik

    AlexandrKulik Новичок

    С нами с:
    16 фев 2019
    Сообщения:
    14
    Симпатии:
    0
    Оперативки в момент зависания такого еще валом там порядка 600Mb свободной.
    Ошибок в логах нет
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    А в каких логах смотрите? И какой уровень логгирования включен? Уверены, что ошибки вообще пишутся?
    Всего 600 метров от 3 гигов? Мало. Что там происходит такое? Уверены, что сервер не захлебывается в свопе в этот момент?
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    вот с этого момента я бы начал расследование. чего ждёт, конкретно?
    --- Добавлено ---
    включай инспектор, вкладку Network и смотри что за запрос подвисает. затем добавляй отладочную инфу в соответствующий скрипт.
    --- Добавлено ---
    звучит довольно очевидно, правда? как правило, причина проблем находится под носом, но мы излишне всё усложняем.
     
  6. AlexandrKulik

    AlexandrKulik Новичок

    С нами с:
    16 фев 2019
    Сообщения:
    14
    Симпатии:
    0
    Во всех по php и ngin и mysql
    Лог по php ALL стоит

    SWAP в момент зависания 0
    --- Добавлено ---
    Дело в то что все работало отлично пока не обновил php c 5 на 7
     
  7. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Раз нет fast-win решения, предлагаю без ручных проверок сразу локализовать проблему (которых вполне возможно несколько):

    тс, поставьте триальную версию агента newrelic https://newrelic.com и посмотрите результат мониторинга. Учитывая, что будут анализироваться все пользовательские сессии и писаться долгие транзакции, вы сразу увидите проблему, а также получите детальную трассировку вызовов по каждому запросу в ваше приложение.
    Обязательно покажите тут результаты если не получится разобраться в отчете самостоятельно: пользовательские параметры как и значения запросов в базы данных отображаться не будут.
     
    #7 Zuldek, 2 мар 2019
    Последнее редактирование: 2 мар 2019
  8. AlexandrKulik

    AlexandrKulik Новичок

    С нами с:
    16 фев 2019
    Сообщения:
    14
    Симпатии:
    0
    Спасибо, попробую
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    чуйка мне подсказывает, увитывая вот это
    что скрипт тупо обламывается где-то из-за несовместимости. поэтому долгих сессий никаких нет. есть отсутствие нормального ответа на запрос. форс-мажор с которым клиентская сторона не справляется, продолжает крутить свои loader icon.
    почему не каждый раз? потому что срабатывает какое-то редкое условие, где наступает ахтунг.
    логи по идее должны содержать ошибку.
     
  10. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    apm покажет все ошибки вместе с трассировкой
     
    #10 Zuldek, 2 мар 2019
    Последнее редактирование: 2 мар 2019
    artoodetoo нравится это.