Ответ
При нагрузочном тестировании веб-приложений и API я использовал JMeter и k6, собирая ключевые метрики для анализа производительности и поиска узких мест.
Основные метрики, которые я замерял:
- Время отклика (Response Time): Среднее, 90-й (p90) и 95-й (p95) процентили. p95 важен, так как показывает опыт 95% пользователей.
- Пропускная способность (Throughput): Количество успешных запросов в секунду (RPS).
- Процент ошибок: Доля запросов с HTTP-статусами 5xx, таймаутами или сбоями.
- Метрики инфраструктуры: Загрузка CPU, использование памяти (RAM), IO-операции диска на серверах приложения и БД (снимал через Grafana + Prometheus).
Пример сценария на k6:
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '30s', target: 50 }, // Плавный рост до 50 VU
{ duration: '1m', target: 50 }, // Удержание нагрузки
{ duration: '20s', target: 0 }, // Спад
],
thresholds: {
'http_req_duration': ['p(95)<500'], // 95% запросов должны быть быстрее 500мс
'http_req_failed': ['rate<0.01'] // Менее 1% ошибок
}
};
export default function () {
const res = http.get('https://api.example.com/users');
check(res, { 'status was 200': (r) => r.status == 200 });
sleep(1);
}
Дополнительно анализировал логи базы данных (например, медленные SQL-запросы в PostgreSQL) и настройки веб-сервера (Nginx/Apache).