파일을 열기 전에 gvim 프로그램이 3초 동안 멈췄습니다. 이 문제는 gvim과 관련이 없으며 vim은 잘 열립니다. 따라서 원인은 vim이 아닌 X 또는 일부 관련 서비스 어딘가에 있어야 합니다.
모든 vim 플러그인과 vimrc 파일을 비활성화해 보았습니다.
증상은 다음과 같습니다.
$ time strace -o strace.gvim -f -yy -T gvim -c q
time: Real 0m3.5s User 0m0.0s System 0m0.1s
vim은 잘 실행되지만:
$ time strace -o strace.vim -f -yy -T vim -c q
time: Real 0m0.2s User 0m0.0s System 0m0.0s
이를 파악하기 위해 무엇이 그렇게 오래 걸리는지 찾고 있습니다.
...dbus 서비스와 관련이 있는 것 같습니다.
$ grep '<3\.[0-9]' -C 2 strace.gvim
-
4907 exit_group(0) = ?
4907 +++ exited with 0 +++
4848 <... nanosleep resumed> 0x7ffcaa8f8670) = 0 <3.000198>
4848 kill(4907, SIGKILL) = -1 ESRCH (No such process) <0.000061>
4848 write(1<pipe:[29773]>, "unix:abstract=/tmp/dbus-8t4OQuvB"..., 73) = 73 <0.000071>
@@@@@@@@ 4586 <... read resumed> "unix:abstract=/tmp/dbus-8t4OQuvB"..., 1024) = 73 <3.038342>
4848 write(1<pipe:[29773]>, "+\23\0\0", 4 <unfinished ...>
4586 read(7<pipe:[29773]>, <unfinished ...>
--
4586 <... read resumed> "", 1024) = 0 <0.000038>
4586 wait4(4848, <unfinished ...>
@@@@@@@@ 4900 <... read resumed> "", 4) = 0 <3.017352>
4848 +++ exited with 0 +++
4900 write(2</dev/null<char 1:3>>, "EOF in dbus-launch reading PID f"..., 47) = 47 <0.000003>
--
4586 close(4<pipe:[30791]>) = 0 <0.000003>
4586 poll([{fd=5<UNIX:[29772]>, events=POLLIN}, {fd=6<anon_inode:[eventfd]>, events=POLLIN}], 2, 0 <unfinished ...>
@@@@@@@@ 4579 <... read resumed> "ok\0", 9) = 3 <3.368490>
4586 <... poll resumed> ) = 0 (Timeout) <0.000006>
4586 poll([{fd=5<UNIX:[29772]>, events=POLLIN}, {fd=6<anon_inode:[eventfd]>, events=POLLIN}], 2, 0 <unfinished ...>
~/.dbus
자세히 살펴보니 해당 폴더는 루트가 소유하고 있는 것으로 나타났습니다 .
4848 mkdir("/home/jaroslav/.dbus", 0700) = -1 EEXIST (File exists) <0.000005>
4848 mkdir("/home/jaroslav/.dbus/session-bus", 0700) = -1 EACCES (Permission denied) <0.000003>
4848 write(2<pipe:[29774]>, "Unable to create /home/jaroslav/"..., 50) = 50 <0.000004>
-
$ ls -ld ~/.dbus
drwx------ 1 root root 1 191206 18:50 /home/jaroslav/.dbus
소유자를 변경하면 문제가 해결되었고 gvim이 즉시 시작되었습니다.
strace는 괜찮지만
3초 이상 걸리는 모든 커널 호출을 추적하고 해당 스택을 인쇄하는 것이 가능합니까(Linux 4.19.72)?