Найти предел
Ступенчатые лестницы нагрузки для БД, CPU и ОЗУ. Каждая ступень — отдельный запрос к /load.py?test=…, JSON-ответ рисуется столбиком. Ползём вверх, пока сервер не сдастся — таймаут, ошибка, OOM.
⚠ на shared-хостинге не запускай подряд, дай серверу подышать
Что мы вообще имеем
Загрузка…
Одной кнопкой
Прогнать всё
Последовательно запускает все лестницы. Останавливается на первом отказе внутри каждой.
Жёсткий режим: MAX_WALL 90 сек на запрос, лестницы до 300k COUNT'ов / 12 ГБ RAM / 6 млрд решето / 500 потоков MySQL. Полный прогон занимает 10-20 минут. Остановится сам, когда сервер сдастся.
1. База данных
Нагрузка на MySQL
Индексные COUNT’ы
Простой запрос по индексу
ix_breed. Меряем, сколько таких успевает сервер за одну CGI-сессию.AVG + STDDEV по GROUP BY
Полная агрегация по всей таблице (~80k строк) —
AVG, STDDEV, COUNT, MAX, MIN.LIKE %x% (без индекса)
Форсированный full-scan:
WHERE name LIKE '%а%'. Меряем throughput сканов.Конкурентные запросы
Из одного CGI-процесса открываем N MySQL-соединений в потоках и одновременно долбим GROUP BY.
2. Процессор
CPU-bound задачи
Хеш-цепочки
N раз подряд
sha256 от прошлого хеша. Проверяет чистый CPU без I/O и памяти.Простые числа до N
Решето на
bytearray. Тут вылезет и CPU, и лимит памяти под N + 1 байт.
3. Оперативная память
Аллокация памяти
Сколько ОЗУ даст CGI
Аллоцируем массив
bytearray(N * 1024 * 1024), обходим и трогаем каждую страницу — чтобы ядро не отложило выделение. Растём: 10, 50, 100, 200, 400, 800, 1200, 2000 МБ, пока не поймаем MemoryError или отвал CGI.
Итоги
Пределы, найденные тестами
Пусто
запусти прогон