Скрипт понижения приоритета процессов SAMBA

Пользователи рабочей файлопомойки сильно замедляют быстродействие сервера. Анализ данных Zabbix и iotop показал, что тяжёлые запросы на чтение/запись сетевых каталогов загоняют сервер в глубокий iowait (80-99%), что является причиной низкой производительности всех других служб (тормозят почта, джаббер, веб-интерфейс, запущенные на том же сервере). Для решения этой проблемы написал небольшой скрипт, который можно закинуть в cron:

#!/bin/bash

# Собираем I/O статистику за 10 секунд
iotop -boqqqk --iter=10 | \
    # выбираем только SAMBA-процессы
    grep smbd | \
    # скоростью выше 1 Мб/с (xxxx.xx K/s)
    grep -P "\d{4}\.\d{2} K/s" | \
    # получаем список PID'ов
    awk '{print $1}' | \
    # исключаем те, которые уже idle
    grep -v idle | \
    # выбираем уникальные
    uniq | \
    # и скармливаем полученное ionice
    xargs -I PID ionice -c3 -p PID

Что делает скрипт, надеюсь, понятно из комментариев. В скрипт можно дописать различные фильтры (например, не резать приоритет у определённого пользователя -- фича, которая не позволяет мне запустить демон samba в ionice'е). Так же по аналогии можно организовать фильтрацию и ограничить приоритет любому другому процессу, активно работающему с диском (ftp, gzip, tar, etc.).

Добавлено: 2015-04-06


Поделиться:

Оставить комментарий

Комментарий появится после одобрения.

Поля со значком * обязательны для заполнения.