Após a reinstalação de todo o sistema aparentemente da mesma forma que o sistema afetado foi instalado, o problema nunca reapareceu.
( E quem diz que você não precisa formatar o disco rígido para resolver problemas no Linux?; -) )
Eu uso o Linux Mint 16 Petra 64bit Cinnamon. Quando eu instalo o Skype (seja a partir do repo ou diretamente da Microsoft), ele logo começa a usar 100% de 1 CPU, duplicando o consumo de energia do meu sistema.
Eu tentei remover a pasta ~/.skype
e fazer login com uma conta diferente.
Eu tentei remover o skype dos repositórios e instalá-lo diretamente da Microsoft .
Há algo que eu possa fazer para solucionar esse problema?
Eu não consigo reproduzir este problema com o antigo Mints, nem com o Ubuntu Saucy e o Raring.
O não se manifesta, se eu iniciar o skype e nunca logar (manter o skype exibindo a tela de login). Mas se o skype estava logado antes e teve o alto consumo de CPU - clicar em "Sair" não ajuda no problema (além disso, mesmo que existisse, não há sentido em usar o Skype sem fazer login)
Seguindo o aviso de @slm, posso incluir a saída strace
. Parece que o Skype está ocupado fazendo poll
syscall ... Eu pensei que a pesquisa por recurso introduza o processador ocioso, não o uso de 100%.
strace -c skype
[ Process PID=31614 runs in 32 bit mode. ]
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
0.00 0.000000 0 1 execve
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 1 total
System call usage summary for 32 bit mode:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
96.95 45.349256 493 92056 poll
1.26 0.588104 2 279026 clock_gettime
0.99 0.462877 3 183996 182979 recv
0.33 0.156517 2 79850 468 stat64
0.30 0.138574 2 79740 gettimeofday
0.10 0.047275 45 1040 174 futex
0.04 0.020046 1671 12 nanosleep
0.01 0.003025 4 792 writev
0.00 0.002037 2 871 write
0.00 0.001928 3 692 143 read
0.00 0.001482 2 944 561 open
0.00 0.000591 2 333 238 access
0.00 0.000584 1 466 mmap2
0.00 0.000577 1 421 madvise
0.00 0.000485 1 431 close
0.00 0.000462 4 120 munmap
0.00 0.000378 3 115 mprotect
0.00 0.000372 4 86 fstatfs64
0.00 0.000269 1 263 fstat64
0.00 0.000175 3 66 29 recvmsg
0.00 0.000113 1 121 time
0.00 0.000108 1 113 5 lstat64
0.00 0.000082 3 29 getdents64
0.00 0.000056 2 30 fadvise64_64
0.00 0.000047 3 15 openat
0.00 0.000046 15 3 shmdt
0.00 0.000045 2 24 sendmsg
0.00 0.000038 2 22 clone
0.00 0.000037 1 33 socket
0.00 0.000032 2 13 _llseek
0.00 0.000032 11 3 shmat
0.00 0.000032 11 3 shmget
0.00 0.000031 1 29 brk
0.00 0.000027 5 6 shmctl
0.00 0.000015 2 9 send
0.00 0.000013 0 27 fcntl64
0.00 0.000011 2 6 2 connect
0.00 0.000007 2 3 readlink
0.00 0.000007 1 13 rt_sigaction
0.00 0.000005 1 4 geteuid32
0.00 0.000005 1 4 getsockname
0.00 0.000003 0 10 uname
0.00 0.000003 3 1 eventfd2
0.00 0.000003 3 1 pipe2
0.00 0.000002 2 1 set_tid_address
0.00 0.000002 2 1 getpeername
0.00 0.000001 1 2 rt_sigprocmask
0.00 0.000001 1 2 getrlimit
0.00 0.000001 1 2 clock_getres
0.00 0.000001 1 1 set_robust_list
0.00 0.000000 0 2 unlink
0.00 0.000000 0 2 chmod
0.00 0.000000 0 3 3 mkdir
0.00 0.000000 0 1 pipe
0.00 0.000000 0 22 ioctl
0.00 0.000000 0 1 umask
0.00 0.000000 0 4 statfs
0.00 0.000000 0 4 fstatfs
0.00 0.000000 0 2 flock
0.00 0.000000 0 3 getuid32
0.00 0.000000 0 1 getgid32
0.00 0.000000 0 1 getegid32
0.00 0.000000 0 1 getresuid32
0.00 0.000000 0 1 getresgid32
0.00 0.000000 0 2 gettid
0.00 0.000000 0 1 sched_getaffinity
0.00 0.000000 0 1 set_thread_area
0.00 0.000000 0 4 1 bind
0.00 0.000000 0 1 listen
0.00 0.000000 0 2 sendto
0.00 0.000000 0 1 shutdown
------ ----------- ----------- --------- --------- ----------------
100.00 46.775820 721911 184603 total
Quando eu atribuo strace à execução do skype com sudo strace -p $(pgrep skype)
, recebo toneladas das seguintes entradas:
clock_gettime(CLOCK_MONOTONIC, {7553, 920730509}) = 0
recv(6, 0xf967e5a8, 4096, 0) = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {7553, 920937548}) = 0
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=12, events=POLLIN}, {fd=28, events=POLLIN}], 6, 0) = 0 (Timeout)
recv(6, 0xf967e5a8, 4096, 0) = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {7553, 921039735}) = 0
recv(6, 0xf967e5a8, 4096, 0) = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {7553, 921089170}) = 0
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=12, events=POLLIN}, {fd=28, events=POLLIN}], 6, 0) = 0 (Timeout)
Você pode tentar depurá-lo ainda mais usando strace
para ver quais chamadas de skype
estão causando o aumento nos recursos. Isso mostrará a você o que o sistema chama skype
está preso.
$ strace -c ls
afile1 afile2 afile3 afile4 afile5
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
0.00 0.000000 0 8 read
0.00 0.000000 0 1 write
0.00 0.000000 0 10 open
0.00 0.000000 0 13 close
0.00 0.000000 0 1 stat
0.00 0.000000 0 11 fstat
0.00 0.000000 0 27 mmap
0.00 0.000000 0 18 mprotect
0.00 0.000000 0 2 munmap
0.00 0.000000 0 3 brk
0.00 0.000000 0 2 rt_sigaction
0.00 0.000000 0 1 rt_sigprocmask
0.00 0.000000 0 2 ioctl
0.00 0.000000 0 1 1 access
0.00 0.000000 0 1 execve
0.00 0.000000 0 2 getdents
0.00 0.000000 0 1 getrlimit
0.00 0.000000 0 2 statfs
0.00 0.000000 0 1 arch_prctl
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 openat
0.00 0.000000 0 1 set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 110 1 total
Você também pode monitorar skype
usando uma ferramenta como top
ou htop
para ver o que os processos estão fazendo no geral.
Vocêtambémpodeusarstrace
paraanexaraprocessosjáemexecução.Issopermiteanexardepoisqueelescomeçaramasecomportarmal.
Digamosquequeremosanexaraonossoprocessohtop
jáemexecuçãoacima.
$pgrephtop32495
EsteéoIDdoprocessoPIDdehtop
.Vocêpodeusá-losparaconectarstrace
.
$strace-p32495|&head-10Process32495attachedselect(1,[0],NULL,NULL,{0,729724})=0(Timeout)open("/proc/meminfo", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f685faf1000
read(3, "MemTotal: 7969128 kB\nMemF"..., 1024) = 1024
read(3, "e: 0\nHugePages_Rsvd: "..., 1024) = 146
read(3, "", 1024) = 0
close(3) = 0
munmap(0x7f685faf1000, 4096) = 0
...
...
O strace
do OP fornecido mostra um alto nível de% de chamadas do sistema poll()
. Você pode descobrir o que é via man poll
.
poll, ppoll - wait for some event on a file descriptor
Portanto, o Skype está aguardando um descritor de arquivo, mas, nesse caso, não é necessariamente um arquivo, pode ser, mas provavelmente está aguardando um recurso de rede contido em um descritor de arquivo.
Para mostrar isso um pouco melhor, aqui está um exemplo. Digamos que estivéssemos baixando um arquivo de 100MB como este usando wget
.
$ wget -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test100.zip
Poderíamos então ver quais descritores de arquivo estavam em uso usando o comando lsof -c wget
.
$ lsof -c wget
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
wget 11531 saml cwd DIR 253,2 4096 7340394 /home/saml/media/mp3s/kids_music
wget 11531 saml rtd DIR 253,1 4096 2 /
wget 11531 saml txt REG 253,1 421712 531380 /usr/bin/wget
wget 11531 saml mem REG 253,1 310576 544452 /usr/lib64/libgssapi_krb5.so.2.2
...
...
wget 11531 saml mem REG 253,1 62368 528212 /usr/lib64/libnss_files-2.17.so
wget 11531 saml mem REG 253,1 106055264 803764 /usr/lib/locale/locale-archive
wget 11531 saml mem REG 253,1 26254 660143 /usr/lib64/gconv/gconv-modules.cache
wget 11531 saml 0u CHR 136,2 0t0 5 /dev/pts/2
wget 11531 saml 1u CHR 136,2 0t0 5 /dev/pts/2
wget 11531 saml 2u CHR 136,2 0t0 5 /dev/pts/2
wget 11531 saml 3w CHR 1,3 0t0 1028 /dev/null
wget 11531 saml 4u IPv4 1543927 0t0 TCP greeneggs.bubba.net:55907->speedtest.wdc01.softlayer.com:htt
Observe a última linha, que é um descritor de arquivo para nossa conexão com o softlayer.com. Portanto, a conexão de rede também é tratada como poll()
por meio de um descritor de arquivo. Você pode fazer o mesmo e confirmar usando um comando como:
$ lsof -c skype
Tags cinnamon skype linux-mint