Skip to content

Базовая оптимизация Linux

Оптимизация операционной системы Linux — критически важный процесс для обеспечения максимальной производительности, безопасности и стабильности системы. В этой статье рассмотрены основные методы оптимизации Ubuntu 24.04 и других дистрибутивов Linux.

Подготовка к оптимизации

Проверка текущего состояния системы

bash
# Проверка версии системы
lsb_release -a
uname -a

# Проверка использования ресурсов
free -h
df -h
top -bn1 | head -20

# Проверка загрузки системы
systemctl list-failed
journalctl -p err -b

Создание резервной копии конфигурации

bash
# Создание бэкапа важных конфигураций
sudo cp -r /etc /etc.backup.$(date +%Y%m%d)
sudo cp -r /home/$USER/.bashrc /home/$USER/.bashrc.backup.$(date +%Y%m%d)

# Создание снапшота системы (если используется LVM)
sudo lvcreate -L 5G -s -n snap_root /dev/ubuntu-vg/ubuntu-lv

Автоматизация файловой системы

Настройка автоматического монтирования

bash
# Просмотр текущих точек монтирования
cat /etc/fstab

# Добавление оптимизированных опций монтирования
sudo nano /etc/fstab

# Пример оптимизированной записи для SSD
# UUID=xxx / ext4 defaults,noatime,discard,errors=remount-ro 0 1

# Пример для HDD
# UUID=xxx / ext4 defaults,relatime,errors=remount-ro 0 1

Оптимизация параметров файловой системы

bash
# Настройка ext4 для SSD
sudo tune2fs -o journal_data_writeback /dev/sda1
sudo tune2fs -O ^has_journal /dev/sda1

# Настройка для HDD
sudo tune2fs -c 0 -i 0 /dev/sda1

# Проверка и исправление файловой системы
sudo fsck -f /dev/sda1

Настройка tmpfs для временных файлов

bash
# Добавление tmpfs для /tmp
echo "tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=2G 0 0" | sudo tee -a /etc/fstab

# Добавление tmpfs для /var/tmp
echo "tmpfs /var/tmp tmpfs defaults,noatime,mode=1777,size=1G 0 0" | sudo tee -a /etc/fstab

# Применение изменений
sudo mount -a

Оптимизация swap

bash
# Проверка текущего swap
swapon --show

# Настройка swappiness для SSD
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

# Настройка для HDD
echo 'vm.swappiness=60' | sudo tee -a /etc/sysctl.conf

# Создание swap файла (если нужно)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Настройка сетевых параметров

Оптимизация TCP/IP стека

bash
# Создание файла сетевых оптимизаций
sudo nano /etc/sysctl.d/99-network-optimization.conf

# Содержимое файла:
cat << 'EOF' | sudo tee /etc/sysctl.d/99-network-optimization.conf
# TCP оптимизации
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 65536 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

# Буферы сети
net.core.netdev_max_backlog = 5000
net.core.netdev_budget = 300
net.core.somaxconn = 65535

# IPv6 оптимизации
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
EOF

Настройка DNS

bash
# Установка быстрого DNS резолвера
sudo apt install systemd-resolved

# Настройка DNS серверов
sudo nano /etc/systemd/resolved.conf

# Раскомментировать и настроить:
# DNS=8.8.8.8 1.1.1.1
# FallbackDNS=8.8.4.4 1.0.0.1
# DNSSEC=yes
# DNSOverTLS=yes

# Перезапуск службы
sudo systemctl restart systemd-resolved

Оптимизация сетевых интерфейсов

bash
# Настройка ethernet интерфейса
sudo nano /etc/netplan/01-network-manager-all.yaml

# Пример конфигурации:
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: true
      dhcp6: false
      # Оптимизации для гигабитного соединения
      link-local: []
      mtu: 1500

Sysctl настройки

Создание оптимизированной конфигурации

bash
# Создание файла системных оптимизаций
sudo nano /etc/sysctl.d/99-system-optimization.conf

# Содержимое файла:
cat << 'EOF' | sudo tee /etc/sysctl.d/99-system-optimization.conf
# Управление памятью
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500

# Файловая система
fs.file-max = 2097152
fs.inotify.max_user_watches = 524288
fs.inotify.max_user_instances = 256

# Процессы и потоки
kernel.pid_max = 4194304
kernel.threads-max = 2097152

# Безопасность
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

# Производительность
kernel.sched_rt_runtime_us = -1
kernel.sched_rt_period_us = 1000000
EOF

Применение настроек

bash
# Применение всех настроек sysctl
sudo sysctl --system

# Проверка примененных настроек
sysctl -a | grep -E "(swappiness|dirty_ratio|file-max)"

# Сохранение настроек для перезагрузки
sudo systemctl enable systemd-sysctl

Удаление ненужных пакетов

Анализ установленных пакетов

bash
# Просмотр всех установленных пакетов
dpkg -l | wc -l

# Поиск неиспользуемых пакетов
deborphan

# Анализ размера пакетов
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n

# Поиск больших пакетов
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -20

Очистка системы

bash
# Очистка кэша пакетов
sudo apt clean
sudo apt autoclean

# Удаление неиспользуемых пакетов
sudo apt autoremove --purge

# Удаление старых ядер
sudo apt autoremove --purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d')

# Очистка логов
sudo journalctl --vacuum-time=7d
sudo find /var/log -type f -name "*.log" -mtime +30 -delete

Удаление ненужных пакетов

bash
# Удаление игр и развлекательных пакетов
sudo apt remove --purge aisleriot gnome-mahjongg gnome-mines gnome-sudoku

# Удаление офисных пакетов (если не нужны)
sudo apt remove --purge libreoffice*

# Удаление мультимедиа пакетов
sudo apt remove --purge rhythmbox totem

# Удаление пакетов разработки (если не нужны)
sudo apt remove --purge build-essential gcc g++ make

# Удаление языковых пакетов (оставить только нужные)
sudo apt remove --purge $(dpkg -l | grep '^ii' | grep -E '^ii  [a-z]{2,3}-' | awk '{print $2}')

Оптимизация автозапуска

bash
# Просмотр служб автозапуска
systemctl list-unit-files --type=service --state=enabled

# Отключение ненужных служб
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable avahi-daemon

# Отключение snap служб (если не используете snap)
sudo systemctl disable snapd
sudo systemctl mask snapd

Дополнительные оптимизации

Настройка CPU governor

bash
# Установка утилит для управления CPU
sudo apt install cpufrequtils

# Настройка производительного режима
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils

# Применение настроек
sudo systemctl enable cpufrequtils
sudo systemctl start cpufrequtils

Оптимизация I/O scheduler

bash
# Настройка I/O scheduler для SSD
echo 'noop' | sudo tee /sys/block/sda/queue/scheduler

# Настройка для HDD
echo 'deadline' | sudo tee /sys/block/sda/queue/scheduler

# Постоянная настройка через udev
sudo nano /etc/udev/rules.d/60-ioschedulers.rules

# Содержимое файла:
cat << 'EOF' | sudo tee /etc/udev/rules.d/60-ioschedulers.rules
# SSD - noop scheduler
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"

# HDD - deadline scheduler  
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="deadline"
EOF

Настройка journald

bash
# Оптимизация логирования
sudo nano /etc/systemd/journald.conf

# Настройки:
# SystemMaxUse=100M
# SystemMaxFileSize=10M
# MaxRetentionSec=1week
# ForwardToSyslog=no
# ForwardToKMsg=no

Мониторинг производительности

Скрипт мониторинга системы

bash
#!/bin/bash
# system_monitor.sh

echo "=== Системная информация ==="
echo "Время работы: $(uptime -p)"
echo "Загрузка: $(uptime | awk -F'load average:' '{print $2}')"
echo "Память: $(free -h | grep '^Mem' | awk '{print $3"/"$2}')"
echo "Диск: $(df -h / | tail -1 | awk '{print $3"/"$2" ("$5")"}')"

echo -e "\n=== Топ процессов по CPU ==="
ps aux --sort=-%cpu | head -10

echo -e "\n=== Топ процессов по памяти ==="
ps aux --sort=-%mem | head -10

echo -e "\n=== Сетевая активность ==="
ss -tuln | wc -l
echo "Активных соединений: $(ss -tuln | wc -l)"

Автоматический скрипт оптимизации

bash
#!/bin/bash
# auto_optimize.sh

echo "Начинаем оптимизацию системы..."

# Обновление системы
echo "Обновление пакетов..."
sudo apt update && sudo apt upgrade -y

# Очистка системы
echo "Очистка системы..."
sudo apt autoremove --purge -y
sudo apt autoclean
sudo apt clean

# Очистка логов
echo "Очистка логов..."
sudo journalctl --vacuum-time=7d
sudo find /var/log -type f -name "*.log" -mtime +30 -delete

# Применение sysctl настроек
echo "Применение системных настроек..."
sudo sysctl --system

# Перезапуск служб
echo "Перезапуск служб..."
sudo systemctl restart systemd-resolved
sudo systemctl restart systemd-journald

echo "Оптимизация завершена!"

Проверка результатов оптимизации

Тестирование производительности

bash
# Тест скорости диска
sudo hdparm -tT /dev/sda

# Тест сети
speedtest-cli

# Тест памяти
sudo memtest86+

# Проверка загрузки системы
systemd-analyze
systemd-analyze blame

Мониторинг после оптимизации

bash
# Создание скрипта мониторинга
cat << 'EOF' > ~/system_stats.sh
#!/bin/bash
echo "=== Статистика системы ==="
echo "Дата: $(date)"
echo "Время работы: $(uptime -p)"
echo "Загрузка: $(cat /proc/loadavg)"
echo "Память: $(free -h | grep '^Mem')"
echo "Диск: $(df -h / | tail -1)"
echo "Сеть: $(ss -tuln | wc -l) активных соединений"
echo "Процессы: $(ps aux | wc -l) запущенных процессов"
EOF

chmod +x ~/system_stats.sh

Восстановление после проблем

Откат изменений

bash
# Восстановление из бэкапа конфигурации
sudo cp -r /etc.backup.$(date +%Y%m%d) /etc

# Восстановление из снапшота LVM
sudo lvconvert --merge /dev/ubuntu-vg/snap_root

# Сброс sysctl настроек
sudo rm /etc/sysctl.d/99-*.conf
sudo sysctl --system

Диагностика проблем

bash
# Проверка системных логов
journalctl -p err -b
dmesg | grep -i error

# Проверка файловой системы
sudo fsck -f /dev/sda1

# Проверка сетевых настроек
ip route show
ip addr show

Лучшие практики

1. Регулярное обслуживание

bash
# Еженедельная очистка
#!/bin/bash
sudo apt update
sudo apt upgrade -y
sudo apt autoremove --purge -y
sudo apt autoclean
sudo journalctl --vacuum-time=7d

2. Мониторинг производительности

bash
# Установка инструментов мониторинга
sudo apt install htop iotop nethogs

# Настройка автоматического мониторинга
echo "*/5 * * * * /home/$USER/system_stats.sh >> /var/log/system_stats.log" | crontab -

3. Резервное копирование

bash
# Создание скрипта бэкапа
#!/bin/bash
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
sudo cp -r /etc $BACKUP_DIR/
sudo cp -r /home/$USER $BACKUP_DIR/
tar -czf $BACKUP_DIR.tar.gz $BACKUP_DIR

Заключение

Правильная оптимизация Linux системы значительно повышает производительность, безопасность и стабильность. Регулярное обслуживание и мониторинг обеспечивают долгосрочную эффективность системы.

Ключевые принципы оптимизации:

  • Постепенное внедрение изменений с тестированием
  • Регулярное обслуживание и мониторинг
  • Резервное копирование перед изменениями
  • Документирование всех изменений
  • Тестирование в тестовой среде перед продакшеном