Как-то мы тут встречались с целью обсудить тестирование производительности, где мы затронули типичные классы проблем производительности.
Так как мы у себя в плеске коллекционируем классы проблем, то я решил их задокументировать:
PERF_LEAK_MEM - классическая утечка памяти, самый простой способ её сделать это использовать C/C++, но если вы профессиональный C/C++ разработчик, то можете развлечь себя написанием собственного аллокатора памяти и сделать утечку уже как профи.
В языках с автоматическим управлением памятью этой утечки можно добиться созданием глобальных объектов без их удаления или удаления ссылок на них.
PERF_LEAK_CPU - выглядит как высокий CPU usage, достигается созданием потоков или таймеров без их удаления, возможно есть способ добиться похожего эффекта в языках с автоматическим управлением памятью через создание большого количества мелких объектов, которые приедается обрабатывать Garbage Collector'у
PERF_LEAK_DISK - создаём какие-то данные на диске и не удаляем за собой, через какое-то время свободное место на диске кончается, очень легко достигается с помощью лог-файлов или бекапов чего-либо, постоянно пишем много логов, создаем бекапы и не ротируем их.
PERF_LEAK_INODES - inode в *nix-like операционных системах это описание файла, которое хранится в структуре фиксированного размера, если создавать десятки миллионов пустых файлов или директорий, то после достижения этого фиксированного размера мы не сможем больше создавать новые файлы
PERF_LEAK_OPEN_FILES - в *nix-like операционных системах, каждый процесс имеет лимит на количество одновременно открытых файлов, обычно 1024, если открывать и не закрывать файлы, то при достижении этого лимита получим ошибку too many open files
PERF_USELESS_WORK - выполняем какую-то работу, которая создаёт нагрузку, но результаты этой работы не нужны все, сейчас или в этом контексте или в таком объёме или с такой точностью(например в time series базе данных задать слишком большую точность, или слишком много данных запросить в SQL запросе)
PERF_CRON_HOUR_X - устанавливаем в датацентре тысячи инстансов продукта у которого у настройках стоит выполнить какую-то работу в час X, например это может быть подсчет статистики или установка обновлений. В час X все тысячи инстансов начинают работу одновременно, что приводит к невероятной нагрузке на сеть, CPU, диски, память.
RACE_CONDITION - классический race condition, не является проблемой производительности, но может быть выявлена при тестировании производительности
Ещё про классы проблем, кажется это довольно полезная практика думать про баги, которые мы находим, к каким классам они относятся, с целью их быстрого поиска или даже недопущения.