Appearance
Базовая оптимизация 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: 1500Sysctl настройки
Создание оптимизированной конфигурации
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=7d2. Мониторинг производительности
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 системы значительно повышает производительность, безопасность и стабильность. Регулярное обслуживание и мониторинг обеспечивают долгосрочную эффективность системы.
Ключевые принципы оптимизации:
- Постепенное внедрение изменений с тестированием
- Регулярное обслуживание и мониторинг
- Резервное копирование перед изменениями
- Документирование всех изменений
- Тестирование в тестовой среде перед продакшеном