- Вопрос или проблема
- Ответ или решение
- 1. Определите время загрузки
- 2. Анализируйте критику:
- 3. Идентифицируйте медленные сервисы
- 4. Оптимизация загрузки серверов
- 5. Проверьте состояние вашей файловой системы
- 6. Освобождение оперативной памяти
- 7. Логирование и диагностика
- 8. Альтернативные дистрибутивы
- Заключение
Вопрос или проблема
Я не уверен, что считается медленной или быстрой загрузкой в мире Linux, но, похоже, что система Lubuntu, которая у меня здесь ( характеристики здесь), запускается довольно медленно (около 50 секунд). Мои родители начали жаловаться на медленную загрузку, и я подумал, что стоит этим заняться.
Мастер настройки LXSession не показал ничего, что должно бы замедлять загрузку. Он показал, что следующие службы будут запускаться при загрузке компьютера (компьютер не на английском, поэтому я не уверен, правильно ли перевожу): управление питанием, обновление программного обеспечения, служба сети, блокировка экрана, обновление пользовательских папок, AT-SPI D-Bus Bus.
Затем я посмотрел в dmesg
, предполагаю, что он показывает время загрузки в начале строки, и заметил странные вещи:
[ 21.827368] audit: type=1400 audit(1471992144.548:9): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/sbin/tcpdump" pid=1854 comm="apparmor_parser"
[ 21.944457] audit: type=1400 audit(1471992144.668:10): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince" pid=1850 comm="apparmor_parser"
[ 21.944478] audit: type=1400 audit(1471992144.668:11): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince//sanitized_helper" pid=1850 comm="apparmor_parser"
[ 32.425176] IPv6: ADDRCONF(NETDEV_UP): enp0s25: link is not ready
[ 32.892255] IPv6: ADDRCONF(NETDEV_UP): enp0s25: link is not ready
[ 34.236909] e1000e: enp0s25 NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
[ 34.237022] e1000e 0000:00:19.0 enp0s25: 10/100 speed: disabling TSO
[ 34.237060] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s25: link becomes ready
[ 42.868183] ata1.00: configured for UDMA/100
[ 42.868192] ata1: EH complete
По какой-то причине на 21-й секунде он просто зависает и начинает загружать службу IPv6, к которой я не имею никакого отношения. Могло ли это быть причиной медленной загрузки? И если да, то как я могу это устранить?
Я искал информацию в Google некоторое время, но не нашел действительно хороших советов, которые помогли бы мне. То, что я пробовал, не решило проблему.
Я был бы благодарен, если кто-то поможет мне разобраться, что вызывает медленную загрузку на этом компьютере с Lubuntu.
Спасибо!
Редактировать: Пользователь по имени eridani предложил мне взглянуть на инструмент под названием systemd-analyze, который может помочь мне обнаружить, что замедляет время загрузки.
Вот вывод команды systemd-analyze plot > ~/Desktop/systemd.html
: ссылка для загрузки (не смог найти лучшего способа поделиться этим).
Еще одна команда, которая была предложена в блоге Arch Linux – это systemd-analyze critical-chain
, вот её вывод:
~$ systemd-analyze critical-chain
Время после активации или запуска единицы измеряется после символа "@".
Время, которое требуется для запуска единицы, выводится после символа "+".
graphical.target @38.425s
└─multi-user.target @38.425s
└─teamviewerd.service @36.611s +1.812s (отображается красным цветом)
└─network-online.target @36.598s
└─NetworkManager-wait-online.service @24.297s +12.301s (отображается красным цветом)
└─NetworkManager.service @19.493s +4.785s (отображается красным цветом)
└─dbus.service @15.022s
└─basic.target @14.901s
└─paths.target @14.901s
└─systemd-networkd-resolvconf-update.path @14.901s
└─sysinit.target @14.869s
└─apparmor.service @6.651s +8.167s (отображается красным цветом)
└─local-fs.target @6.646s
└─run-user-1000.mount @34.907s
└─local-fs-pre.target @6.646s
└─systemd-remount-fs.service @6.533s +100ms (отображается красным цветом)
└─system.slice @1.934s
└─-.slice @1.851s
NetworkManager и apparmor.service, похоже, занимают довольно много времени для загрузки. Могу ли я что-то изменить, чтобы они загружались быстрее?
С другой стороны, является ли 44 секунды хорошим временем загрузки, учитывая мои характеристики? Могу ли я как-то уменьшить это время, используя какую-то еще более легкую дистрибуцию (хотя я не хочу потерять много удобства, так как это компьютер моих родителей, текущий GUI Lubuntu достаточно хорош, я могу попробовать и Xubuntu).
Спасибо за помощь.
Редактировать2: Очевидно, что команда disable
на самом деле не отключила NetworkManager-wait-online.service
, поэтому я использовал следующие команды:
systemctl disable NetworkManager-wait-online.service
systemctl mask NetworkManager-wait-online.service
И снизил время загрузки с этого: Startup finished in 5.647s (kernel) + 38.452s (userspace) = 44.100s
до этого: Startup finished in 5.487s (kernel) + 26.994s (userspace) = 32.481s
. Хотя с психологической точки зрения это не кажется, что это на 12 секунд быстрее, но если цифры это показывают, то мне нечего возразить.
И теперь у нас осталась apparmor.service
, которая загружалась ~10 секунд. Вот обновленный вывод команды systemd-analyze critical-chain
:
:~$ systemd-analyze critical-chain
Время после активации или старта единицы измеряется после символа "@".
Время, которое требуется для запуска единицы, выводится после символа "+".
graphical.target @26.958s
└─multi-user.target @26.958s
└─ntp.service @26.590s +368ms (отображается красным)
└─network-online.target @26.569s
└─network.target @26.569s
└─NetworkManager.service @23.537s +3.032s (отображается красным)
└─dbus.service @16.973s
└─basic.target @16.896s
└─sockets.target @16.896s
└─pcscd.socket @16.896s
└─sysinit.target @16.895s
└─apparmor.service @6.518s +10.348s (отображается красным)
└─local-fs.target @6.513s
└─local-fs-pre.target @6.456s
└─systemd-remount-fs.service @6.353s +88ms (отображается красным)
└─systemd-journald.socket @1.901s
└─-.mount @1.826s
└─system.slice @1.901s
└─-.slice @1.826s
И вывод команды systemd-analyze blame | head
:
:~$ systemd-analyze blame | head
10.348s apparmor.service
9.634s dev-sda1.device
7.510s ModemManager.service
7.449s grub-common.service
6.908s networking.service
6.898s apport.service
6.879s irqbalance.service
6.791s systemd-logind.service
6.724s ondemand.service
6.595s alsa-restore.service
Полезный пользователь, eridani, попросил вывести результаты двух команд, которые могут помочь мне устранить медлительность apparmor.service, вот они:
~$ systemctl status apparmor
● apparmor.service - LSB: AppArmor initialization
Loaded: loaded (/etc/init.d/apparmor; bad; vendor preset: enabled)
Active: active (exited) since P 2016-08-28 20:00:10 EEST; 31мин. назад
Docs: man:systemd-sysv-generator(8)
Process: 785 ExecStart=/etc/init.d/apparmor start (код=выход; статус=0/SUCCESS)
авг 28 19:59:59 dc7800 systemd[1]: Starting LSB: AppArmor initialization...
авг 28 20:00:08 dc7800 apparmor[785]: * Starting AppArmor profiles
авг 28 20:00:09 dc7800 apparmor[785]: Skipping profile in /etc/apparmor.d/disable: usr.bin.firefox
авг 28 20:00:09 dc7800 apparmor[785]: Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
авг 28 20:00:10 dc7800 apparmor[785]: ...done.
авг 28 20:00:10 dc7800 systemd[1]: Started LSB: AppArmor initialization.
И еще одна:
:~$ journalctl |grep apparmor
авг 28 20:00:08 dc7800 apparmor[785]: * Starting AppArmor profiles
авг 28 20:00:09 dc7800 audit[1849]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/sbin/dhclient" pid=1849 comm="apparmor_parser"
авг 28 20:00:09 dc7800 audit[1849]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1849 comm="apparmor_parser"
авг 28 20:00:09 dc7800 audit[1849]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=1849 comm="apparmor_parser"
авг 28 20:00:09 dc7800 audit[1849]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/connman/scripts/dhclient-script" pid=1849 comm="apparmor_parser"
авг 28 20:00:09 dc7800 kernel: audit: type=1400 audit(1472403609.772:2): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/sbin/dhclient" pid=1849 comm="apparmor_parser"
авг 28 20:00:09 dc7800 kernel: audit: type=1400 audit(1472403609.772:3): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1849 comm="apparmor_parser"
авг 28 20:00:09 dc7800 kernel: audit: type=1400 audit(1472403609.772:4): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=1849 comm="apparmor_parser"
авг 28 20:00:09 dc7800 kernel: audit: type=1400 audit(1472403609.772:5): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/connman/scripts/dhclient-script" pid=1849 comm="apparmor_parser"
авг 28 20:00:09 dc7800 audit[1848]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/lightdm/lightdm-guest-session" pid=1848 comm="apparmor_parser"
авг 28 20:00:09 dc7800 audit[1848]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/lightdm/lightdm-guest-session//chromium" pid=1848 comm="apparmor_parser"
авг 28 20:00:09 dc7800 audit[1850]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince" pid=1850 comm="apparmor_parser"
авг 28 20:00:10 dc7800 kernel: audit: type=1400 audit(1472403609.996:9): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/sbin/tcpdump" pid=1854 comm="apparmor_parser"
авг 28 20:00:10 dc7800 audit[1850]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince//sanitized_helper" pid=1850 comm="apparmor_parser"
авг 28 20:00:10 dc7800 audit[1850]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince-previewer" pid=1850 comm="apparmor_parser"
авг 28 20:00:10 dc7800 audit[1850]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince-thumbnailer" pid=1850 comm="apparmor_parser"
авг 28 20:00:10 dc7800 audit[1850]: AVC apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince-thumbnailer//sanitized_helper" pid=1850 comm="apparmor_parser"
авг 28 20:00:10 dc7800 kernel: audit: type=1400 audit(1472403610.068:10): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince" pid=1850 comm="apparmor_parser"
авг 28 20:00:10 dc7800 kernel: audit: type=1400 audit(1472403610.072:11): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince//sanitized_helper" pid=1850 comm="apparmor_parser"
авг 28 20:00:10 dc7800 apparmor[785]: ...done.
Я также пытаюсь искать в Google, но буду признателен за хорошие мысли и отсюда 🙂 Спасибо за всю помощь, особенно eridani!
Чтобы немного прояснить ситуацию, у меня относительно быстрая система (на Ubuntu) и она загружается за около 8 секунд (i7 @ 3.6GHz, 16GB RAM @ 1866MHz и M.2 диск, на котором находится корневая раздел).
Характеристики настольного ПК выглядят довольно низко (1.8 GHz, 1 GB RAM @ 667MHz и HDD медленнее средней скорости на 3GBps). Вы не получите фантастического времени загрузки с этой системой. Теперь lubuntu более легковесен, чем Ubuntu, так что это должно помочь, но все равно у вас достаточно много загружается при старте.
Судя по всему, ваша оперативная память может стать узким местом, наряду со скоростью вашего HDD. Я представляю, что индикатор доступа к HDD у вас мигает много на T: 21 секунда?
Вы, похоже, думаете, что это не всегда было так медленно. Чем больше служб вы добавляете, тем медленнее время загрузки. Особенно, если ваш HDD заполнен, это займет больше времени, чтобы найти информацию.
Хотя это и не решает вашу проблему, это помогает понять ситуацию и показывает некоторые потенциальные проблемы с вашими временем загрузки.
Ответ или решение
Чтобы определить причины медленной загрузки системы Lubuntu, необходимо провести последовательное исследование. Исходя из вашего описания, вы уже начали анализировать проблему с помощью различных инструментов. Давайте рассмотрим ключевые шаги для дальнейшего анализа и оптимизации времени загрузки.
1. Определите время загрузки
Вы можете использовать команду systemd-analyze
для получения общего времени загрузки. Это даст представление о том, сколько времени потребовалось вашему ядру и пользовательскому пространству при загрузке. Попробуйте команды:
systemd-analyze
Это будет выглядеть как:
Startup finished in X.YYYs (kernel) + Z.ZZZs (userspace) = T.TTTs
2. Анализируйте критику:
Команда systemd-analyze critical-chain
предоставляет структурированный взгляд на последовательность загрузки службы и то, какая служба создает задержки. Это может помочь выявить зависимые сервисы, которые также могут замедлять процесс загрузки:
systemd-analyze critical-chain
3. Идентифицируйте медленные сервисы
Вы уже собрали данные с помощью systemd-analyze blame
, что позволяет увидеть, какие сервисы потребляют больше всего времени. Для этого выполните:
systemd-analyze blame | head
Если вы видите, что некоторые сервисы (например, apparmor.service
или NetworkManager.service
) используют значительное время, это указывает на возможные точки оптимизации.
4. Оптимизация загрузки серверов
-
NetworkManager-wait-online.service: Этот сервис ожидает, пока сетевое соединение не станет активным. Если вам не нужно ждать, вы можете отключить его, что, как вы уже заметили, ускорит загрузку:
systemctl disable NetworkManager-wait-online.service
Или, если необходимо полное отключение:
systemctl mask NetworkManager-wait-online.service
-
AppArmor: Если вы не полагаетесь на AppArmor для безопасности, вы можете попробовать временно отключить его, чтобы проверить, влияет ли это на время загрузки.
systemctl disable apparmor.service
Имейте в виду, что это может снизить безопасность системы, поэтому будьте осторожны.
5. Проверьте состояние вашей файловой системы
Медленная работа жесткого диска может значительно замедлить загрузку. Выполните диагностику:
sudo smartctl -a /dev/sda
Эта команда проверит состояние вашего диска. Убедитесь, что ваш жесткий диск не перегружен и не находится на грани выхода из строя.
6. Освобождение оперативной памяти
Учитывая ваши аппаратные характеристики (1 ГБ ОЗУ), это может быть серьезным узким местом. Попробуйте:
- Ограничить количество стартовых приложений.
- Изолировать ресурсоемкие задачи в отдельные сеансы.
- Рассмотрите возможность расширения оперативной памяти (если возможно), чтобы улучшить общую производительность.
7. Логирование и диагностика
Вы можете использовать разные утилиты для логирования и диагностики, чтобы понять, что именно замедляет систему. Например, journalctl -b
покажет логи загрузки, которые могут указать на проблемы.
8. Альтернативные дистрибутивы
Если после всех оптимизаций время загрузки остаётся неудовлетворительным, возможно, стоит рассмотреть другие легкие дистрибутивы. Например, Xubuntu или Manjaro могут оказаться более эффективными в использовании ресурсов по сравнению с Lubuntu. Однако протестируйте их перед окончательным решением.
Заключение
Системы с ограниченными ресурсами часто требуют тщательной настройки, чтобы обеспечить оптимальную производительность, особенно при загрузке. Надеюсь, эти шаги помогут вам определить узкие места и значительно сократить время загрузки вашей системы Lubuntu. Рекомендуется записывать изменения, чтобы вы могли легко восстанавливать систему в случае возникновения новых проблем.