nginx и php-fpm

Discussion in 'Linux, Freebsd, *nix' started by Sifon110, 24 May 2015.

  1. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Всем привет. В общем такое дело.

    Значит есть железо 4 ядра по 3.2, 32 RAM, Linix CentOS. Стоит на нем nginx, php-fpm, mysql. Есть софт, который работает в 2000 потоков. Каждый поток в секунду делает примерно по 2 запроса к серверу.

    Проблема в том, что сервер долго грузится и запросы обрабатываются очень долго. Как уже я только не выставлял настройки worker_processes, worker_connections, pm.max_spare_servers, pm.start_servers и тд. И равному кол-ву ядер ставил, и вообще дахрена выставлял. Результат один и тот же. Запросы долго обрабатываются, но ресурсы сервера максимум задействуются только на 30%.

    Cpu постоянно в норме ( < 50%), рам тоже. Mysql сервер не лагает от нагрузки, все в пределах нормы. Проблема только в долгих запросах. Даже на статику(без php).

    Прошу помощи, в какую сторону идти и какие настройки лучше всего выставить.
     
  2. usasoft

    usasoft Member

    Joined:
    29 Sep 2007
    Messages:
    102
    Likes Received:
    22
    Reputations:
    6
    статика - включи кеш в nginx
    что за запросы, к php вывести 123? или к mysql c join и прочим?)
    смотри php-fpm.log
    смотри mysql-slow.log
     
  3. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    там сплошные записи вида:

    Code:
    [24-May-2015 23:52:02] NOTICE: [pool www] child 29223 started
    [24-May-2015 23:52:14] NOTICE: [pool www] child 29159 exited with code 0 after 28.894163 seconds from start
    [24-May-2015 23:52:14] NOTICE: [pool www] child 29224 started
    [24-May-2015 23:52:18] NOTICE: [pool www] child 29161 exited with code 0 after 27.491981 seconds from start
    [24-May-2015 23:52:18] NOTICE: [pool www] child 29225 started
    [24-May-2015 23:52:20] NOTICE: [pool www] child 29163 exited with code 0 after 24.817942 seconds from start
    [24-May-2015 23:52:20] NOTICE: [pool www] child 29226 started
    [24-May-2015 23:52:27] NOTICE: [pool www] child 29223 exited with code 0 after 24.862892 seconds from start
    [24-May-2015 23:52:27] NOTICE: [pool www] child 29227 started
    [24-May-2015 23:52:28] NOTICE: [pool www] child 29162 exited with code 0 after 36.953496 seconds from start
    [24-May-2015 23:52:28] NOTICE: [pool www] child 29228 started
    [24-May-2015 23:52:29] NOTICE: [pool www] child 29158 exited with code 0 after 44.276996 seconds from start
    [24-May-2015 23:52:29] NOTICE: [pool www] child 29229 started
    [24-May-2015 23:52:37] NOTICE: [pool www] child 29226 exited with code 0 after 17.089888 seconds from start
    [24-May-2015 23:52:37] NOTICE: [pool www] child 29237 started
    вроде ничего интересного

    к mysql
     
  4. usasoft

    usasoft Member

    Joined:
    29 Sep 2007
    Messages:
    102
    Likes Received:
    22
    Reputations:
    6
    почитай о профилировании запросов в MySQL
     
  5. ZodiaX

    ZodiaX Reservists Of Antichat

    Joined:
    7 May 2009
    Messages:
    533
    Likes Received:
    308
    Reputations:
    51
    Посмотри утилизацию дисков и можно копать в сторону тюнинга MySQL. Может где индексов не хватает или попробовать вынести таблицу в память. Это уже зависит от архитектуры сервиса.
     
  6. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
  7. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    2000 потоков спамящие 2 запроса/сек и 32мб ОЗУ и задействовано 30% то есть 10Мб ОЗУ обрабатывают 4000 запросов ежесекундно... Вы ничего не путаете? Чем то на бред смахивает. Чем мониторите нагрузку?
     
  8. ZodiaX

    ZodiaX Reservists Of Antichat

    Joined:
    7 May 2009
    Messages:
    533
    Likes Received:
    308
    Reputations:
    51
    Ну наверное все таки 32 Гб ОЗУ, на 32 Мб боюсь сама система бы не развернулась.
     
  9. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Получился такой результат:

    [​IMG]

    Что посоветуете?
     
  10. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    В результате работы скрипт дает рекомендации что делать (в скрине не указаны), но я бы обратил на неправильно конфигурирование ключей конфигурации, отвечающих за максимальные объем выделяемой памяти под операции (query_cache_size, join_buffer_size и тд) - максимальный объем потребляемой памяти может быть в какой то момент выше чем у тебя установленно, а так же то что у тебя почти каждый пятый запрос расценивается как slow. Какой тип таблиц ты используешь в основном, я так понял - MyISAM? Поменяй на InnoDB, Aria/MyISAM больше для гостевых книг подходит.

    Еще советую посмотреть slow-log и оптимизировать запросы - добавить индексы или удалить лишние, explain тебе в помощь. Сто процентов, что проблема именно в этом.
     
  11. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Спасибо.

    Проблема в том, что в slow-log идут почему-то практически все запросы, даже например обычный легкий селект на таблицу, в которой только 10 записей.
     
  12. 1qoot1

    1qoot1 Member

    Joined:
    13 Jan 2014
    Messages:
    48
    Likes Received:
    10
    Reputations:
    1
    Скорей всего тормозит мускуль.

    Если запросы однотипные используйте memcached или аналоги.

    Для БД используйте sphinx (если данные в запросах однотипные) или его аналоги.

    Оптимизируйте саму систему чтение/запись данных + параметры sysctl.conf

    Оптимизируйте сетевой стек.
     
  13. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    Возможно из за блокировки на чтение (неподходящий уровень изоляции и тд) самый обычный SELECT может выполняться бесконечно долго. Какой тип таблиц - MyISAM или InnoDB? Попробуйте сделать EXPLAIN запроса самого простого и скиньте сюда результат что он покажет.

    Например, EXPLAIN SELECT * FROM news.
     
  14. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    тип таблиц использую MyISAM.

    [​IMG]
     
  15. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    MyISAM не подойдет под твои нужды, смени на InnoDB.

    Почитай http://ruhighload.com/post/Работа+с+индексами+в+MySQL

    В твоем примере тебе индексы не помогут, тк всего 55 записей, но на таблицах побольше лучше сделай хотя бы простые индексы на тех колонках, по которым делаешь выборку.

    И скинь полный вывод mysqtuner.pl
     
  16. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Спасибо большое за помощь.

    Code:
    >>  MySQLTuner 1.4.0 - Major Hayden <[email protected]>
    >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
    >>  Run with '--help' for additional options and output filtering
    [OK] Currently running supported MySQL version 5.5.31-log
    [OK] Operating on 64-bit architecture
    
    -------- Storage Engine Statistics -------------------------------------------
    [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED -InnoDB +MRG_MYISAM
    [--] Data in MyISAM tables: 267M (Tables: 21)
    [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
    [!!] Total fragmented tables: 9
    
    -------- Security Recommendations  -------------------------------------------
    [OK] All database users have passwords assigned
    
    -------- Performance Metrics -------------------------------------------------
    [--] Up for: 12m 23s (234K q [315.233 qps], 57K conn, TX: 106M, RX: 17M)
    [--] Reads / Writes: 49% / 51%
    [--] Total buffers: 11.0G global + 15.4M per thread (500 max threads)
    [OK] Maximum possible memory usage: 18.5G (59% of installed RAM)
    [!!] Slow queries: 15% (36K/234K)
    [OK] Highest usage of available connections: 13% (67/500)
    [OK] Key buffer size / total MyISAM indexes: 10.7G/262.0K
    [OK] Key buffer hit rate: 100.0% (535K cached / 94 reads)
    [OK] Query cache efficiency: 37.1% (20K cached / 55K selects)
    [OK] Query cache prunes per day: 0
    [OK] Sorts requiring temporary tables: 0% (0 temp sorts / 7K sorts)
    [!!] Temporary tables created on disk: 99% (7K on disk / 7K total)
    [OK] Thread cache hit rate: 99% (67 created / 57K connections)
    [OK] Table cache hit rate: 58% (64 open / 109 opened)
    [OK] Open file limit used: 2% (74/2K)
    [!!] Table locks acquired immediately: 83%
    
    -------- Recommendations -----------------------------------------------------
    General recommendations:
        Run OPTIMIZE TABLE to defragment tables for better performance
        MySQL started within last 24 hours - recommendations may be inaccurate
        Temporary table size is already large - reduce result set size
        Reduce your SELECT DISTINCT queries without LIMIT clauses
        Optimize queries and/or use InnoDB to reduce lock wait
     
  17. bluesky

    bluesky New Member

    Joined:
    26 Sep 2009
    Messages:
    44
    Likes Received:
    3
    Reputations:
    0
    прикрепите конфиги ваши сюда.