За последние 24 часа нас посетили 23236 программистов и 1518 роботов. Сейчас ищут 858 программистов ...

Загадочный таймаут

Тема в разделе "Прочие вопросы по PHP", создана пользователем unrecovered, 3 фев 2015.

  1. unrecovered

    unrecovered Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    45
    Симпатии:
    0
    Приветствую. При попытке выполнить аяксовый скрипт загрузки контента(вордпресс, тема Avada, демо-контент) на личном хостинге процесс отваливается по таймауту. На полноценном хостинге всё закачивается без проблем. Ошибка в вордпрессе:
    Ошибка в логах пхп-фпм:
    max_execution_time увеличивал, set_time_limit(0) прописывал, память давал, один хрен...

    куда копать?
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ну дай 24 часа времени и терабайт оперативки, может поможет. Шутка.

    Можно ещё с помощью xdebug найти что так долго работает.
    Читай код как всё устроено, перепроверь.
     
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    скорее всего бесконечный цикл
     
  4. unrecovered

    unrecovered Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    45
    Симпатии:
    0
    тогда бы и на другом хостинге не работало... =\

    Добавлено спустя 1 минуту 36 секунд:
    за xdebug спасибо, посмотрю
    эх... не хотел я лезть в это болото говнокода... да видимо придется :D
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не факт =)

    сделай лог, куда пиши что делает цикл и поймёшь что он делает и на чем виснет.
     
  6. unrecovered

    unrecovered Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    45
    Симпатии:
    0
    У меня уже бывали проблемы со скриптами, причем именно с использующими аякс... поэтому всё-таки подозреваю, что дело не в скрипте
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ну тогда расскажи нам в чем проблема. как бывалый.

    Добавлено спустя 3 минуты 15 секунд:
    могу рассказать о своих наблюдениях: бывает тормозят сетевые функции потому что не могут разрезолвить адрес или доступа наружу нет. этим хостинг может отличаться от локалки.
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в логе написано, что в скрипте. =) в логе написано, что скрипт работает более 30 секунд.
     
  9. unrecovered

    unrecovered Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    45
    Симпатии:
    0
    а почему вырубается после 30? я же время выполнения увеличил О_о
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Видимо нет у тебя (у скрипта) таких полномочий.
     
  11. unrecovered

    unrecovered Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    45
    Симпатии:
    0
    phpinfo показывает max_execution_time 300, значит есть =\
     
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    может веб-сервер рвет слишком долгий сеанс обмена?
     
  13. unrecovered

    unrecovered Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    45
    Симпатии:
    0
    Немного трэша. Я нашел прикольную строчку в настройках:
    Код (Text):
    1.  
    2. request_terminate_timeout = 30s
    Именно из-за неё рвалось соединение. Но трэш не только в этом. Смотрим лог:
    Код (Text):
    1.  
    2. [04-Feb-2015 10:38:42] WARNING: [pool unrecovered] child 11880, script '/home/unrecovered/wptest.ru/public_html/wp-admin/admin-ajax.php' (request: "POST /wp-admin/admin-ajax.php") execution timed out (305.554360 sec), terminating
    3. [04-Feb-2015 10:38:42] WARNING: [pool unrecovered] child 11880 exited on signal 15 (SIGTERM) after 430.069442 seconds from start
    4. [04-Feb-2015 10:38:42] NOTICE: [pool unrecovered] child 11936 started
    То есть 300 секунд кагбе не хватает...
    Текст самого скрипта прилагаю, извините что не под спойлером - не нашел, где он тут =( Подскажите, как корректно отдебажить?
    Код (PHP):
    1. <?php
    2. /**
    3.  * WordPress AJAX Process Execution.
    4.  *
    5.  * @package WordPress
    6.  * @subpackage Administration
    7.  *
    8.  * @link http://codex.wordpress.org/AJAX_in_Plugins
    9.  */
    10.  
    11. /**
    12.  * Executing AJAX process.
    13.  *
    14.  * @since 2.1.0
    15.  */
    16. define( 'DOING_AJAX', true );
    17. if ( ! defined( 'WP_ADMIN' ) ) {
    18.         define( 'WP_ADMIN', true );
    19. }
    20.  
    21. /** Load WordPress Bootstrap */
    22. require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );
    23.  
    24. /** Allow for cross-domain requests (from the frontend). */
    25. send_origin_headers();
    26.  
    27. // Require an action parameter
    28. if ( empty( $_REQUEST['action'] ) )
    29.         die( '0' );
    30.  
    31. /** Load WordPress Administration APIs */
    32. require_once( ABSPATH . 'wp-admin/includes/admin.php' );
    33.  
    34. /** Load Ajax Handlers for WordPress Core */
    35. require_once( ABSPATH . 'wp-admin/includes/ajax-actions.php' );
    36.  
    37. @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
    38. @header( 'X-Robots-Tag: noindex' );
    39.  
    40. send_nosniff_header();
    41. nocache_headers();
    42.  
    43. /** This action is documented in wp-admin/admin.php */
    44. do_action( 'admin_init' );
    45.  
    46. $core_actions_get = array(
    47.         'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache',
    48.         'autocomplete-user', 'dashboard-widgets', 'logged-in',
    49. );
    50.  
    51. $core_actions_post = array(
    52.         'oembed-cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link',
    53.         'delete-meta', 'delete-post', 'trash-post', 'untrash-post', 'delete-page', 'dim-comment',
    54.         'add-link-category', 'add-tag', 'get-tagcloud', 'get-comments', 'replyto-comment',
    55.         'edit-comment', 'add-menu-item', 'add-meta', 'add-user', 'closed-postboxes',
    56.         'hidden-columns', 'update-welcome-panel', 'menu-get-metabox', 'wp-link-ajax',
    57.         'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink',
    58.         'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order',
    59.         'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post',
    60.         'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment',
    61.         'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor',
    62.         'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs',
    63.         'save-user-color-scheme', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail',
    64.         'parse-media-shortcode', 'destroy-sessions'
    65. );
    66.  
    67. // Register core Ajax calls.
    68. if ( ! empty( $_GET['action'] ) && in_array( $_GET['action'], $core_actions_get ) )
    69.         add_action( 'wp_ajax_' . $_GET['action'], 'wp_ajax_' . str_replace( '-', '_', $_GET['action'] ), 1 );
    70.  
    71. if ( ! empty( $_POST['action'] ) && in_array( $_POST['action'], $core_actions_post ) )
    72.         add_action( 'wp_ajax_' . $_POST['action'], 'wp_ajax_' . str_replace( '-', '_', $_POST['action'] ), 1 );
    73.  
    74. add_action( 'wp_ajax_nopriv_heartbeat', 'wp_ajax_nopriv_heartbeat', 1 );
    75.  
    76. if ( is_user_logged_in() ) {
    77.         /**
    78.          * Fires authenticated AJAX actions for logged-in users.
    79.          *
    80.          * The dynamic portion of the hook name, `$_REQUEST['action']`,
    81.          * refers to the name of the AJAX action callback being fired.
    82.          *
    83.          * @since 2.1.0
    84.          */
    85.         do_action( 'wp_ajax_' . $_REQUEST['action'] );
    86. } else {
    87.         /**
    88.          * Fires non-authenticated AJAX actions for logged-out users.
    89.          *
    90.          * The dynamic portion of the hook name, `$_REQUEST['action']`,
    91.          * refers to the name of the AJAX action callback being fired.
    92.          *
    93.          * @since 2.8.0
    94.          */
    95.         do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] );
    96. }
    97. // Default status
    98. die( '0' );
    99.  
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну во-первых собаки убери! во-вторых xdebug и брейкпоинты или лог пиши.
     
  15. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Если "некогда разбираться", можешь локализовать проблему просто втыкая die() в разные места.

    Еще идейка насчет причины: блокировка сессии или еще какого-то ресурса. Типичный кейс: где-то стоит file_get_content('http://адрес на этом же сайте') и дочерний запрос пытается открыть сессию/другую херню, которую захватил родительский запрос. Если адрес захардкоден, на одном сайте будет проходить, а на другом нет.
     
  16. unrecovered

    unrecovered Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    45
    Симпатии:
    0
    Я, конечно, извиняюсь, но... xdebug на автологгировании родил 200-метровую портянку лога, что именно в ней искать? :)
     
  17. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не, надо профайлить.

    Надо брейпоинты ставить.

    Да забей ты. Сделай лог и смотри, что напишет.
     
  18. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    место дальше оторого скрипт не идет