Ajuda a entender e depurar inicialização lenta com systemd network-online.target

0

Eu passei algum tempo no google, mas não quero uma solução rápida aqui, quero entender o que está acontecendo. Eu tenho uma área de trabalho que inicializa no Windows em 3 segundos e inicializa o Ubuntu antigo em menos de 10, mas com o Kubuntu 15.10 leva mais de 40 segundos para inicializar, e o login do KDE também é muito lento.

$ systemd-analyze critical-chain 

graphical.target @9.961s
└─multi-user.target @9.961s
  └─getty.target @9.961s
    └─[email protected] @9.961s
      └─rc-local.service @9.925s +3ms
        └─network-online.target @9.924s
          └─network.target @1.000s
            └─wpa_supplicant.service @1.772s +338ms
              └─basic.target @797ms
                └─sockets.target @797ms
                  └─avahi-daemon.socket @797ms
                    └─sysinit.target @795ms
                      └─networking.service @740ms +54ms
                        └─apparmor.service @416ms +323ms
                          └─local-fs.target @409ms
                            └─local-fs-pre.target @409ms
                              └─systemd-remount-fs.service @401ms +6ms
                                └─system.slice @128ms
                                  └─-.slice @128ms

Portanto, é claro que o atraso se deve à espera de ficar online. Muitas perguntas aqui:

  1. Por que uma versão para desktop do Ubuntu bloqueia minha inicialização e login, esperando por uma conexão de rede? Esses serviços não podem ser iniciados depois que eu iniciei? Eu quero entender porque alguém acha que isso é razoável. Mesmo para um servidor, não seria melhor deixá-lo inicializar e depois iniciar os serviços que exigem rede?

  2. Como posso depurar quais serviços estão bloqueando na rede? Eu tentei $ systemctl show network-online.target e isso me mostra que o alvo online é desejado por kerneloops.service . Por que esse serviço precisa de internet para começar? Além disso, isso parece algo que viria padrão na instalação. Eu imagino que posso desativar esse, mas eu não quero passar as próximas 3 horas desabilitando e reiniciando um por um. Existe uma maneira melhor de ver todos os serviços que estão bloqueando network-online.target ? Posso adiar esses serviços para iniciar o pós-login em vez de desativá-los?

  3. Isso é o menos importante para mim, mas em um desktop com uma conexão ethernet a um roteador, por que leva quase 10 segundos para ficar on-line?

por stokastic 05.04.2016 / 07:03

1 resposta

1

Eu (parcialmente) resolvi isso, então eu queria postar como no caso de alguém com problemas semelhantes encontrar isso.

Resumo de

- Comentei a linha After=network-online.target em /lib/systemd/system/rc-local.service.d/debian.conf . Note que isso pode quebrar scripts rc.local que dependem da rede.

Veja como eu o encontrei. Primeiro, eu li alguns recursos aqui link

Do meu post acima, eu sabia que network-online.target era lento, e no google eu sabia que era a coisa que esperava para ter uma conexão de rede. Eu executei systemctl list-dependencies network-online.target --before para determinar quais serviços estavam esperando até que a rede fosse iniciada e vi que rc-local.service estava lá. Além disso, o alvo gráfico (que eu acho que é a coisa que traz a tela de login) dependia de rc-local.service . Eu corri systemctl cat rc-local.service e vi que o debian tinha adicionado a dependência After on-line, mais algumas informações aqui: bug: link

Eu acho que isso é seguro, contanto que você não tenha nada no rc.local que precise de rede, o que deve ser o caso da maioria das instalações normais que não são do servidor.

Agora meu sistema "inicializa" em cerca de 3 segundos, mas leva muito tempo para fazer o login depois que eu digito minha senha, então talvez eu tenha acabado de chutar o balde, mas pelo menos progredi

    
por stokastic 06.04.2016 / 18:20