Php sleep грузит процессор

Обновлено: 07.07.2024

pm = dynamic – количество дочерних процессов устанавливается динамически, основываясь на следующих директивах: pm.max_children , pm.start_servers , pm.min_spare_servers , pm.max_spare_servers .

pm = ondemand – процессы плодятся по требованию (при необходимости, в отличие от динамического варианта, где pm.start_servers запускаются при запуске сервиса).

pm = static – количество дочерних процессов фиксировано директивой pm.max_children .

…вы можете посмотреть полный список директив php-fpm.conf для получения дополнительной информации.

Менеджер процессов (process manager) PHP-FPM-а схож с CPUFreq Governor

Это может показаться немного не по теме, но я надеюсь связать его с нашей оптимизацией PHP-FPM. Да, все мы когда-то натыкались на проблемы с производительностью процессора, будь то ноутбук, виртуальная машина или выделенный сервер. Помните масштабирование частоты процессора? (CPUFreq governor) Эти параметры, доступные на *nix и Windows, могут повысить производительность и отзывчивость системы путем изменения настройки CPU governor с ondemand на performance . Сейчас давайте сравним описания и поищем сходства:

Governor = ondemand – Динамически увеличивает/уменьшает тактовую частоту процессора в зависимости от загруженности системы. Выводит до максимальной частоты, а потом уменьшает по мере увеличения времени простоя.

Governor = conservative – Похож на ondemand, но более экономный (предпочтение отдаётся меньшим тактовым частотам). Частота растёт более плавно.

Governor = performance – Поддерживает процессор(ы) на максимальной тактовой частоте.

… для дополнительной информации см. полный список настроек CPUFreq governor.

Заметили сходство? Я хотел сначала использовать это сравнение, чтобы более наглядно и лучше описать рекомендацию использовать pm static для PHP-FPM в качестве вашего первого выбора.

Настройка performance в CPU governor – это довольно безопасный прирост производительности, потому что это почти полностью зависит от предела процессора вашего сервера. Но есть несколько побочных эффектов (при постоянном удерживании частоты вашего процессора на 100%) – такие, как нагрев, время автономной работы (ноутбук) и другие. Однако это действительно самый быстрый параметр для вашего процессора.

Использование pm = static для максимальной производительности вашего сервера

Настройка pm = static в PHP-FPM сильно зависит от того, сколько свободной памяти на сервере. В основном, если вы страдаете от нехватки памяти сервера, то pm ondemand или dynamic могут оказаться лучшими вариантами. С другой стороны, если у вас достаточно свободной памяти, вы можете избежать большей части накладных расходов менеджера процессов, установив pm static до максимальной емкости сервера. Другими словами, когда вы делаете расчёты, pm.static нужно установить на максимальное количество PHP-FPM процессов, которые могут выполняться без создания проблем доступности памяти или кеша; однако, не так высоко, чтобы перегрузить процессор(ы) и иметь кучу отложенных операций PHP-FPM-а.

Тут отображаются не все процессы, а только та часть, что вместилась в ваше терминальное окно. В нашем случае отсортированных по %CPU (потреблению процессора). Чтобы увидеть все 100 PHP-FPM процессов, вы можете использовать что-то вроде этого:

Когда использовать pm ondemand и dynamic

Используя режим dynamic , вы можете наткнуться на подобные ошибки:

Вы можете попытаться увеличить/изменить настройки и по-прежнему видеть ту же ошибку. Подобная ситуация описана в этом вопросе на Serverfault. В таком случае, pm.min была слишком низкой, а т. к. трафик сильно колеблется, режим dynamic достаточно сложно настроить правильно. Общий совет: используйте ondemand , как советуют в этом же вопросе. Однако что еще хуже, т. к. ondemand будет завершать процессы в простое вплоть до 0 когда мало трафика, то после вы получите настолько много накладных расходов, насколько скакнёт трафик. Если, конечно, вы не установите время ожидания чрезвычайно высоким. В этом случае вам просто нужно использовать pm = static + высокий pm.max_requests .

Заключение

Когда дело доходит до PHP-FPM, раз вы начали получать серьезный трафик, то режимы ondemand и dynamic могут ограничить пропускную способность из-за свойственного оверхеда. Исследуйте вашу систему и установите количество процессов в наибольшее, с которым справится ваш сервер. Начните с pm.max_children , установленным на основе максимального использования режимов dynamic или ondemand , а затем увеличивайте до точки, где память и процессор остаются не перегруженными. Вы заметите, что с pm = static , т. к. вы держите всё в памяти, всплески трафика со временем будут меньше влиять на всплески загрузки процессора, а показатели загрузки и средней загрузки станут более сглаженными. Средний размер вашего PHP-FPM-процесса будет зависеть от конкретного веб-сервера, требующего ручной настройки, вот почему автоматизированные режимы – dynamic и ondemand – являются более популярными рекомендациями. Надеюсь, это была полезная статья.

Стандартные библиотеки PHP умеют генерировать только целые случайные числа. Однако, возникают задачи где нужно не целое рандомное число с максимально…

Иногда при обработке с помощью PHP больших и не очень данных, можно словить досадную ошибку посреди выполнения скрипта: PHP Fatal…

Я только что просмотрел документацию на sleep() .

Где бы вы использовали эту функцию?

Это нужно для того, чтобы ЦП не выполнял дорогостоящую функцию?

Какие-нибудь распространенные ошибки?

Одно из возможных применений - создание задержки .

Допустим, вы создали сканер, который использует curl / file_get_contents для получения удаленных страниц. Теперь вы не хотите забрасывать удаленный сервер слишком большим количеством запросов за короткое время. Таким образом, вы вводите задержку между последовательными запросами.

sleep принимает аргумент за секунды, его друг usleep принимает аргументы за микросекунды и в некоторых случаях более подходит.

Другой пример: вы запускаете какой-то пакетный процесс, интенсивно использующий ресурсы. Может быть, вы просматриваете базу данных из 9 000 000 названий книг и обновляете около 10% из них. Этот процесс должен выполняться в середине дня, но необходимо сделать так много обновлений, что запуск вашей пакетной программы перетаскивает сервер базы данных в режим обхода для других пользователей.

Вот фрагмент того, как я использую sleep в одном из моих проектов:

В этом случае sleep помогает мне предотвратить блокировку карт Google, потому что я отправляю слишком много запросов на сервер.

Старый вопрос, который я знаю, но еще одна причина для использования u / sleep может заключаться в том, что вы пишете код безопасности / криптографии, например скрипт аутентификации. Пара примеров:

  1. Возможно, вы захотите снизить эффективность потенциальной атаки методом перебора, намеренно замедлив сценарий входа в систему, особенно после нескольких неудачных попыток.
  2. Также вы можете добавить искусственную задержку во время шифрования для защиты от временных атак. Я знаю, что шансы на то, что вы собираетесь написать такой подробный код шифрования на таком языке, как PHP, невелики, но я считаю, что все еще в силе.

ИЗМЕНИТЬ

Использование u / sleep против временных атак - не лучшее решение. Вы все еще можете получить важные данные с помощью временной атаки, вам просто нужно больше выборок, чтобы отфильтровать шум, который добавляет u / sleep.

Дополнительную информацию по этой теме можно найти в: Может ли случайный сон предотвратить временные атаки?

Вы можете использовать спящий режим, чтобы приостановить выполнение скрипта . например, чтобы отложить вызов AJAX на стороне сервера или реализовать наблюдатель. Вы также можете использовать его для имитации задержек.

Я использую это также, чтобы отложить sendmail () & co. .

Кто-то использует sleep () для предотвращения DoS и перебора входа в систему, я не согласен, потому что в этом вам нужно добавить некоторые проверки, чтобы пользователь не запускался несколько раз.

Мне пришлось использовать его недавно, когда я использовал API геолокации Google. Каждый адрес в цикле должен был вызвать сервер Google, поэтому требовалось немного времени, чтобы получить ответ. Я использовал usleep(500000) , чтобы уделить всему достаточно времени.

Обычно я не использую его для обслуживания веб-страниц, но он полезен для сценариев командной строки.

Супер старые посты, но я подумал, что тоже буду комментировать. Недавно мне пришлось проверить ОЧЕНЬ длительный процесс, в результате которого были созданы некоторые файлы. Итак, я создал функцию, которая выполняет итерацию по функции cURL. Если файл, который я ищу, не существует, я засыпаю php-файл и немного проверяю его:

Другой способ использования: если вы хотите выполнять cronjob чаще каждую минуту. Для этого я использую следующий код:

Я вызываю этот файл и каждую минуту cronjob.php.

Это немного странный случай . регулирование передачи файлов.

Таким образом, серверы работали непрерывно со скоростью около 9,5 Мбит / с, без проблем с насыщением восходящего канала . и всегда динамически регулируя скорость загрузки.

Я бы не стал делать это сейчас или на PHP . но в то время это работало отлично.

Одно из его применений заключается в том, что если я отправляю письма с помощью скрипта более чем 100 клиентам, эта операция займет максимум 1-2 секунды, поэтому большая часть веб-сайтов, таких как hotmail и yahoo, считает это спамом, поэтому, чтобы избежать этого, нам нужно использовать некоторая задержка в исполнении после каждого письма.

Среди прочего: вы тестируете веб-приложение, которое выполняет синхронные запросы (вызовы AJAX, отложенная загрузка изображений, . )

Вы тестируете его локально, поэтому ответы будут мгновенными, поскольку есть только один пользователь (вы) и нет задержки в сети.

Использование sleep позволяет вам увидеть / протестировать, как веб-приложение ведет себя, когда нагрузка и сеть вызывают задержку запросов.

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

Процессы в Linux

В программирование бывает необходимость писать программы, которые должны работать непрерывно, причины тому могут быть: непрерывное отслеживание изменений на сайте, длительное выполнение какой-либо операции, веб-сокет сервер и другие. И для небольших программ язык PHP, как никогда подходит лучше всего. Здесь я попытаюсь описать возможные шаги, которые нужно предпринять чтобы написать свою программу работающую в среде Linux. Я предполагаю что Вы уже знакомы с Линукс и слова «консоль» и «ssh» Вас уже не пугают. Примеры команд будут запущены в среде Debian Linux 8.4, с PHP 7. Сам PHP 7 установлен как CLI.

Оглавление

Процесс в Linux

Запуская программу в Unix вы создаёте «процесс», т.е. процессор начинает выполнять инструкции программы. Чтобы не запутаться в названиях «программа» и «процесс» можно представить, что «программа» это некоторая бумага с текстом приказа, а «процесс» это робот который читает приказ и выполняет его. Вполне может быть что процесс может удалить программу, которая его запустила или что процесс запустил другие программы, т.е. вызвал другие процессы.

Запуская программу в Unix процессу присваиваются некоторые параметры, а именно:

* Запуская программу в консоли я использую на конце символ «&», это я делаю для того чтобы после запуска в консоли можно было запускать другие программы, т.е. не быть заблокированным своим процессом.

- Имя - имя процесса формируется из имени программы и параметры его запуска. Т.е. если выполнить в консоли « php sleep.php & » процесс будет называться « php sleep.php » если же выполнить « /usr/local/bin/php sleep.php & », то процесс будет называться « /usr/local/bin/php sleep.php ». Но так бывает не всегда, при желании процесс может задать себе новое какое пожелает. Пример:

Вывод команды ps будет напоминать что-то вроде этого.

Я всё же рекомендую не использовать в имени процесса UTF-8 символы и спец символы, во избежания проблем с операционными системами Unix, без поддержки Unicode на уровне ядра.

- PPID - PID родительского процесса. У каждого процесса есть родитель, т.е. процесс который его запустил. У родительского процесса также может присутстовать родитель и так вверх по иерархии. На самом верху иерархии находится процесс « init » или « systemd », он является родоначальников всех процессов и его запускает само ядро Linux. У процесса всегда есть родитель, если родительский процесс закрывается все потомки родительского процесса «усыновляются» процессом « init » или « systemd ». Если вы запускаете программу через консоль, то родителем процесса будет консольная программа, вероятно « tcsh », « bash » или « zsh ». Посмотреть иерархию процессов можно так:

- UID - UID пользователя, который запустил процесс. После запуска процессу ещё присваивается владелец и группа (почти как у файла) и с правами этого пользователя процесс будет работать. К примеру если мы запустим программу от пользователя «user1» находящегося в группе «group1», то процесс сможет выполнять действия доступные пользователю «user1», и не сможет скажем зайти в папку «/root» или удалить файл, владелец которого является пользователь «user2».

- Аргументы программы - строки указанные в консоле при запуске программы после имени программы через пробел. Например если в консоли запустить программу: «php example.php a b -p1 --test=2», аргументами будут строки «a», «b», «-p1», «--test=2». В PHP аргументы программы можно найти в глобальном массиве $argv, а кол-во аргументов можно найти в глобальной переменной «$argc». Пример:

Закрытие процесса

Если вы запустили программу и программа заблокировала консоль используйте сочетание клавиш « Ctrl + C » и программа завершится. Или если просто хотите вернуться консоль не закрывая программу, то нажмите « Ctrl + Z », а далее « bg ».

Программы Linux для работы с процессами

Программ для работы с процессами множество, я же расскажу о программах которые мне нравятся больше и популярные примеры их использования. Речь пойдёт о программах: ps , pgrep , kill , htop .

- ps - показывает запущенные процессы и сведения по ним. Примеры:

* - Если написать просто «ps -ef | grep "simple.php"», то отобразиться не только нужный нам процесс и сведения о самом нашем процессе «ps» и это может запутать.

- pgrep - ищет процесс по имени и возвращает PID процесса. В отличии от ps не возвращает PID самого себя, а только нужный нам. В большинстве случаев результат программы pgrep используется другими программами. Примеры:

* Если процесс не настроен на «ловлю» этого сигнала процесс завершиться.

- htop - программа для мониторинга процессов в реальном времени. Программа позволяет узнать загруженность системы, а также узнать какие процессы используют большую часть процессорного времени или оперативной памяти. Удобно запускать в отдельном окне и заглядывать туда.

- pstree - показать дерево процессов. Можно посмотреть всю иерархию процессов или всех «предков» процесса.

Непрерывный процесс

Теперь нам нужно добиться того чтобы наш скрипт работал постоянно (а не выключался после запуска), для этого нам достаточно написать бесконечный цикл, к примеру вот так:

Если мы запустим этот скрипт, у нас действительно процесс будет запущен постоянно, но при этом мы получим почти 100% загрузку процессора, т.е. итерации цикла будут выполняться постоянно со 100% скоростью. Чтобы этого избежать нагрузку процессора, но при этом получать отклик необходимо по окончании каждой итерации цикла останавливать скрипт на некоторое количество времени. Для этого можно использовать функции « sleep » или « usleep », при « sleep » указывается время в секундах, а при «usleep» время в микросекундах, т.е. « sleep(2) = usleep(2000000) ». Переделаем наш скрипт:

Здесь «usleep» будет означать, время отклика ваше программы на внешние раздражители (сигналы, сокеты и прочее).Теперь вместо почти 100% загруженности получим почти 0% загруженность процессора при простаивании процесса. Вероятно программа, которая работает в фоне будет не просто выполняться в бесконечном цикле, а ждать поступления определённого события (сигналы, таймер, поступление данных на канал или сокет, изменения в файлах и прочее), здесь же скрипт предоставлен в качестве примера.

Отвязываемся от консоли

Мы научились запускать процессы в режиме ожидания, теперь необходимо чтобы процесс смог самостоятельно работать и не быть «привязанным к консоли». Запуская свои программы в консоли мы можем заметить пока программа выполняется, другие программы запускать в консоли не получается. Есть несколько способов запустить программу в фоновом режиме.

Первый способ:

Используйте символ « & » (Амперса́нд) после набора команды. Пример:

Консоли бывают разные (bash, tcsh, zsh и др.) и некоторые консоли (но не tcsh) при закрытии отправляют процессам специальный сигнал «SIGHUP», после чего программы завершают своё выполнение. Чтобы этого избежать используйте программу «nohup», она гарантирует что после закрытия консоли программы не закроются.

Второй способ:

После запуска программы нажмите сочетание клавиш « Ctrl + Z » и далее команду « bg ». Сочетаниями клавиш мы ставим процесс на «паузу» и командой « bg » «будим» процесс и он продолжает работать работать в фоне.

Третий способ:

Ещё один способ подразумевает что запущенный процесс (родительский процесс) «склонирует» себе подобный процесс (дочерний процесс) т.е. «форкнется» и завершиться. Родительский процесс завершиться, а дочерний процесс продолжит работу, к тому же он усыновляется процессом « init » и перестаёт быть зависимым от консоли. Я считаю этот способ более предпочтительным, т.к. нам теперь нет необходимости на конце писать символ « & » и следить не закроется ли он после закрытия консоли.

Одна программа - один процесс

Запуская нашу программу несколько раз мы будем постоянно «плодить» одинаковые процессы, нам же нужно чтобы программа порождала только один процесс. Чтобы программа запускалась только один раз, нужно чтобы она перед запуском опрашивала систему на поиск себе подобных процессов. Один из способов узнать запущенна ли уже программа это использовать «pid-файл», т.е. файл в котором записан PID запущенного процесса. Определить какой PID текущего процесса можно функцией posix_getpid . Создаётся pid-файл вот так:

Далее при каждом запуске программы, программа будет читать этот файл и на указанный PID будет отправлять сигнал, если ответ придёт утвердительный значит программа уже запущена и запуск повторный не потребуется, если же ответа нет значит можно запускаться. Проверить запущен ли процесс с определённым PID можно функцией « posix_kill », которая отправит сигнал процессу. В функции указать сигнал с номером « 0 ».

Теперь напишем программу, которая будет запускаться только один раз:

Программа запустилась только один раз.

PHP-программа как Unix скрипт

Теперь если запустить файл без указания интерпритатора, то программа запуститься через «/usr/bin/php», если запустить с указанием интерпритатора, то программа запустить через указнный в консоли интерпритатор. Пример:

Помогите пжл разобраться - не понятно почему mysqld грузит процессор 40-80%.При 7 подключении к примеру.
Сервер:Quad Xeon 2.13Ghz
RAM:2Gb (половина свободна)
Крутится сайт на Nginx в связки php-fpm
Вот вывод mytop:
Queries: 1.5M qps: 357 Slow: 465.0 Se/In/Up/De(%): 87/01/00/01
qps now: 264 Slow qps: 0.0 Threads: 3 ( 1/ 63) 83/01/01/01
Cache Hits: 1.1M Hits/s: 252.4 Hits now: 202.3 Ratio: 81.8% Ratio now: 92.8%
Key Efficiency: 93.8% Bps in/out: 39.7k/ 2.4M Now in/out: 44.3k/783.4k

Id User Host/IP DB Time Cmd Query or State
-- ---- ------- -- ---- --- ----------
28589 root localhost site 0 Query show full processlist
4390 root localhost 18 Sleep
169 root localhost 3841 Sleep

При этом mysql 82 20 0 2577M 514M uwait 3 57:47 52.05% mysqld

Может я где то что то не так настроил?
Или как можно выяснить из-за чего?Из кривого сайта или настроек mysql..

mytop вам пишет, что 300 запросов в секунду, но почему-то не показывает сами запросы. Попробуйте SHOW FULL PROCESSLIST несколько раз, подключившись к mysql под рутом.

rgbeast написал:

mytop вам пишет, что 300 запросов в секунду, но почему-то не показывает сами запросы. Попробуйте SHOW FULL PROCESSLIST несколько раз, подключившись к mysql под рутом.

В предыдущем примере тоже было все под рутом.(а может mytop не показывать запросы - так как они закешированы? query_cache_size=256M - 56мб занято)

Вот с SHOW FULL PROCESSLIST

MySQL on localhost (5.5.20-log) up 0+00:28:50 [19:27:33]
Queries: 783.8k qps: 464 Slow: 0.0 Se/In/Up/De(%): 87/00/00/01
qps now: 702 Slow qps: 0.0 Threads: 17 ( 5/ 21) 86/01/00/01
Cache Hits: 614.3k Hits/s: 363.6 Hits now: 533.3 Ratio: 89.9% Ratio now: 88.2%
Key Efficiency: 92.2% Bps in/out: 49.5k/ 1.2M Now in/out: 76.2k/ 1.6M

Id User Host/IP DB Time Cmd Query or State
-- ---- ------- -- ---- --- ----------
8829 root localhost site 0 Query show full processlist
13758 site localhost site 0 Query select * from video where id_lang=1 and st
13774 root localhost site 0 Query SELECT * FROM extension WHERE `type` = 'mo
13776 root localhost site 0 Sleep
13759 site localhost site 1 Query select * from video where id_lang=1 and st
13762 root localhost site 1 Sleep
13763 site localhost site 1 Sleep
13768 root localhost site 1 Sleep
13769 site localhost site 1 Sleep
13770 root localhost site 1 Sleep
13771 site localhost site 1 Sleep
13772 root localhost site 1 Query SELECT * FROM (SELECT id.title AS title, i
13773 site localhost site 1 Sleep
13777 site localhost site 1 Sleep
13775 site localhost site 1 Sleep
9126 root localhost 347 Sleep
8491 root localhost 564 Sleep

Отредактированно SSD (20.09.2012 20:37:04)

Бросается в глаза, что везде SELECT *
Может быть все поля требуются не всегда.

Вынесли Mysql на отдельный сервер.

Все отлично - но иногда вывод странички тормозит - ожидание ответа от"сайта" - и при этом mysqld грузит процессорное время ..

Вот конфиг
innodb_flush_log_at_trx_commit=1
sync_binlog=1
key_buffer_size = 1G
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 64M
read_buffer_size = 12M
read_rnd_buffer_size = 24M
net_buffer_length = 2K
thread_stack = 128K
max_connections=1000
max_join_size=1000000
thread_cache_size=64
query_cache_size=512M
ft_min_word_len=2
log-slow-queries=/var/log/mysql/slow_queries
tmp_table_size=64M
max_heap_table_size=64M
table_cache=1024
-----------------------
Версия
mysql-server-5.5.28 Multithreaded SQL database (server)
-------------------------------

Cache Hits: 267.1k Hits/s: 313.0 Hits now: 0.0 Ratio: 84.9% Ratio now: 0.0%
Key Efficiency: 99.6% Bps in/out: 36.8k/586.4k
Master: mysql-bin.000030/2684553 do: ign:

Id User Host/IP DB Time Cmd Query or State
-- ---- ------- -- ---- --- ----------
4459 tvi3 172.16.0.1 tvi2012103 0 Query DELETE FROM whos_online WHERE time_last_click < '1361040295'
4460 tvi3 172.16.0.1 tvi2012103 0 Query INSERT INTO whos_online SET customer_id = '0', full_name = 'Guest', session_id = 'q5veap1m4i511on4qpgp48h9a3', ip_address = '85.246.217.235', b
4461 root localhost test 0 Query show full processlist
4462 tvi3 172.16.0.1 tvi2012103 0 Query SELECT news_id as uid, date_public as date, title, purple_new as isPriority, file_local as video FROM news WHERE in_list = 1 and status = 1 and
4453 tvi3 172.16.0.1 tvi2012103 1 Query SELECT n.*, DATE_FORMAT(n.date_public , '%H:%i') AS public_time, DATE_FORMAT(n.date_public, '%e,%c,%w') AS public_date, DATE_FORMAT(n.date_efir
4454 tvi3 172.16.0.1 tvi2012103 1 Query UPDATE news SET views = views + 1 WHERE news_id = '13686'
4455 tvi3 172.16.0.1 tvi2012103 1 Query UPDATE news SET video_views = video_views + 1 WHERE news_id = '13674'
4456 tvi3 172.16.0.1 tvi2012103 1 Query SELECT news_id, image, file_local FROM news WHERE news_id = '13689'
4457 tvi3 172.16.0.1 tvi2012103 1 Query SELECT alias, type_id, UNIX_TIMESTAMP(date_public) AS rss_date FROM news WHERE news_id = '12491'
4458 tvi3 172.16.0.1 tvi2012103 1 Query SELECT news_id FROM news WHERE alias = 'mCSB_buttons.jpg'
2269 root localhost test 4 Sleep
319 replicato 172.16.0.1 820 Binlog Master has sent all binlog to slave; waiting for binlog to be updated

Может еще подскажите что не так или куда смотреть.

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 2G (Tables: 219)
[--] Data in InnoDB tables: 11M (Tables: 7)
[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
[!!] Total fragmented tables: 15

-------- Performance Metrics -------------------------------------------------
[--] Up for: 17m 7s (434K q [423.396 qps], 5K conn, TX: 596M, RX: 39M)
[--] Reads / Writes: 89% / 11%
[--] Total buffers: 1.7G global + 100.2M per thread (1000 max threads)
[!!] Maximum possible memory usage: 99.6G (1106% of installed RAM)
[OK] Slow queries: 0% (0/434K)
[OK] Highest usage of available connections: 2% (20/1000)
[OK] Key buffer size / total MyISAM indexes: 1.0G/227.2M
[OK] Key buffer hit rate: 99.7% (24M cached / 82K reads)
[OK] Query cache efficiency: 84.9% (333K cached / 392K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 5K sorts)
[!!] Temporary tables created on disk: 41% (842 on disk / 2K total)
[OK] Thread cache hit rate: 99% (20 created / 5K connections)
[OK] Table cache hit rate: 76% (314 open / 410 opened)
[OK] Open file limit used: 4% (544/11K)
[OK] Table locks acquired immediately: 97% (81K immediate / 83K locks)
[OK] InnoDB data size / buffer pool: 11.1M/128.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Reduce your overall MySQL memory footprint for system stability
When making adjustments, make tmp_table_size/max_heap_table_size equal
Reduce your SELECT DISTINCT queries without LIMIT clauses
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
tmp_table_size (> 64M)
max_heap_table_size (> 64M)

Читайте также: