Bash-скрипт для тестирования PHP-скрипта с помощью ApacheBench (AB)

12.10.2010

Классная штука, этот ApacheBench, здорово нагружает. Искал программу для нагрузочного тестирования, везде натыкался на ab, а потом ещё и в комментах посоветовали. Поставил. Доволен.

Я пишу в блог, а тестирование вовсю нагружает машину...

Зачем ещё дополнительный скрипт?

Чтобы максимально уменьшить ручной труд. Например, если я делаю имитацию 1000 запросов от трёх гиперхолериков через ab, на этот процесс тратится примерно 3 минуты. Но за это время проблема может проявиться, а может и нет. Она, проблема эта, вообще очень трудноуловимая! И что ж делать, каждые три минуты что ли запускать скрипт и на бумажку записывать статистику? Не, это не для меня, тем более я спать уже хочу.

В общем, набросал скриптик (посмотрите или скачайте), который в цикле запускает ab с нужными параметрами, проверяет файл на сбросы, и если сброс был — фиксирует это. Кроме того, скрипт перезапускает сервер, если он вдруг падает в fork.

Вот теперь можно и поспать, а машина пусть работает часика три-четыре.
Хотя не знаю, смогу ли заснуть, уж очень увлечён этой «научно-исследовательской работой» :) Иногда проблемы вгоняют в тоску, но часто они весьма интересны и позволяют узнать много нового. Вот сегодня, например, в очередной раз убедился в потрясающем удобстве и гибкости UNIX.

P.S. Скрипт надо запускать от суперпользователя.
Апачбенчи детям не игрушки. Стресс-тест опасен!

P.P.S. Если планируете использовать это для своих нужд, скриптик, конечно, следует поправить в некоторых местах. У вас тестируемый PHP-скрипт и окружение могут быть совсем другими. Если же именно Daos хотите потестировать, обратите внимание на строчку 36 (grep test@stress), она проверяет в файле статистики тестовый адрес рекламодателя test@stress.OK.com, то есть для успешной работы в ротации должна быть строчка от такого рекламодателя. Иначе скрипт будет считать, что файл повреждён.

P.P.P.S. Процесс идёт.

Когда начинал писать эту заметку, скрипт отработал примерно 200 циклов, а теперь уже 400. За это время было 10 перезагрузок сервера и 9 сбросов.

Маловато сбросов, конечно, для статистики, но уже какие-то цифры. Правильное решение должно быть устойчивым, чтобы ни одного сброса не было вообще.

А ещё я думаю, что файловая система тоже сильно влияет на вероятность проявления этого бага. У меня JFS сейчас, а какая чаще всего будет на серверах у клиентов? ХЗ.

P.P.P.P.S. Иногда надо спать!

Заменил скрипт, переделал. Раньше код перезапуска сервера вызывался последним, из-за этого сбросы могли фиксироваться из-за отказов сервера, хотя фактически файл, может, и не повреждался вовсе в этом случае. Сейчас работает точнее. Пришлось запустить заново, и теперь уж точно спать. На сегодня мозгу хватит пищи, пусть во сне переваривает. Файл обновил, код для просмотра тоже — http://pastie.org/1214748

Проснулся. Скрипт прошёл 1000 циклов, за это время было зафиксировано 25 сбросов и 12 перезагрузок сервера. Ну, это уже какие-то цифры, работать можно.

Этот материал входит в цикл статей об эволюции функций чтения/записи в Daos. Следующая статья уже есть, она третья в цикле.

Комментарии

  1. # Белый Негр

    Тормоз, а что это за WM у тебя? Перешел таки на DWM или это такое издевательство над xfce?

  2. # lusever

    Кстати, не стоит забывать, что сервер может ложится просто под нагрузкой, даже при пустом php файле.

  3. # Michael_XIII

    >cat /tmp/stress-ab.log | tail -n 60

    tail -60 /tmp/stress-ab.log

    Интересно как много людей будут ставить продукт на Мангуст? Не разумней ли тестировать на более распространенном окружении?

    Ну и пути лучше сразу в переменные выносить

  4. # Миша: 

    Ты всеже доиграешься что винт слетит, бекапы уже сделал :)?

  5. # Тормоз

    Белый негр, да, перешёл на DWM и доволен как слон.

    Lusever, может, конечно, но тут уж что поделаешь?

    Michael_XII, делаю так, чтобы работало где угодно, ставить толстенный Apache только потому что он популярен, я не хочу. А вам письмо пришло? :)

    Миша, что-то и не подумал про бэкапы, да мне сейчас их особо и некуда. Надеюсь, всё будет хорошо. Я везучий.

  6. # Миша: 

    Дропбокс, например
    DWM, а какже юникод? Лучше уж awesom, хотя я сам dwm долгое время использовал, но потом пересел на отечетсвенный форк awesome‘а, там название на букву е, не помню точно. xft хотелось уж очень

  7. # Тормоз

    Под Dropbox нормального консольного клиента не нашёл, какое-то питонячье красноглазие предлагается только. А с графическим мне уже неудобно работать.

    В холивары не хочу вступать. Нравится тебе гламурный awesome, пользуйся, я не против :)

  8. # Миша: 

    я не про гламур, я про крякозябры в тайтлах, или у тебя они вообще отключены ? и разве xft это гламур ? может у тебя еще w3m настольный браузер :)?

  9. # Миша: 

    пардон, по скрину понятно что к чему, но на моей памяти юникод dwm не держал. патченый?

  10. # Тормоз

    Нет, просто всё меняется. Из патчей только раскладка колонками (которой почти не пользуюсь).

  11. # Миша: 

    прикольно, чтоли поставить себе :)

  12. # Тормоз

    Нафиг? :) Если нормально работает то, что тебя устраивает — не трожь.

  13. # Белый Негр

    Тормоз, а тебе не нужны «плюшки» типа блютуса, быстрых клавиш для громкости, настроек там всяких? Как оно вообще живется под «тупо» оконным менеджером? Может, напишешь статейку? ;)

  14. # Тормоз

    Блютуса нет, громкость регулирую крутилкой колонок или в mplayer. Каких именно настроек мне может не хватать?

    Живётся отлично. Статейку писать лень, честно говоря :) Да и видишь, сколько дел сейчас. Посмотрим, если будет настроение — напишу.

Комментирование этой статьи закрыто.

Интересное Покупки ТехникаРазное Отдых Статьи Строительство Услуги Общество Хобби Культура Советы Уют