Col*_*jac 7 gnome nautilus i3-wm 20.04
我正在使用 Ubuntu 20.04,将 i3 作为窗口管理器,但安装了 gnome 子系统。
我有一个问题,在重新启动后的某个随机时间间隔(数小时或数天)内,任何尝试打开 thunar 或 nautilus,或应用程序(例如 Firefox)打开文件对话框的任何尝试都需要一分钟或更长时间才能打开,或者只是永远超时并要求我终止应用程序。
我如何才能找出造成此延迟的应用程序、文件、扩展名或驱动程序?
我尝试了以下方法:
journalctl 当(例如)鹦鹉螺终于工作时显示以下内容我有几台设置非常相似的机器,只有一台有这种行为。我无法弄清楚什么应用程序或库是罪魁祸首。
的输出strace -t -o /tmp/nautilus nautilus:
20:15:32 write(24, "\1\0\0\0\0\0\0\0", 8) = 8
20:15:32 poll([{fd=24, events=POLLIN}], 1, 0) = 1 ([{fd=24, revents=POLLIN}])
20:15:32 read(24, "\1\0\0\0\0\0\0\0", 16) = 8
20:15:32 write(24, "\1\0\0\0\0\0\0\0", 8) = 8
20:15:32 futex(0x56241fa9c880, FUTEX_WAKE_PRIVATE, 2147483647) = 0
20:15:32 close(24) = 0
20:15:32 eventfd2(0, EFD_CLOEXEC|EFD_NONBLOCK) = 24
20:15:32 write(24, "\1\0\0\0\0\0\0\0", 8) = 8
20:15:32 write(6, "\1\0\0\0\0\0\0\0", 8) = 8
20:15:32 futex(0x56241ef26dc0, FUTEX_WAKE_PRIVATE, 1) = 1
20:15:32 futex(0x56241ef26910, FUTEX_WAKE_PRIVATE, 1) = 1
20:15:32 futex(0x56241ef1c038, FUTEX_WAKE_PRIVATE, 1) = 1
20:15:32 poll([{fd=24, events=POLLIN}], 1, 25000) = 1 ([{fd=24, revents=POLLIN}])
20:15:32 read(24, "\1\0\0\0\0\0\0\0", 16) = 8
20:15:32 poll([{fd=24, events=POLLIN}], 1, 25000) = 0 (Timeout)
20:15:57 write(24, "\1\0\0\0\0\0\0\0", 8) = 8
20:15:57 futex(0x56241fa9c880, FUTEX_WAKE_PRIVATE, 2147483647) = 0
20:15:57 close(24) = 0
Run Code Online (Sandbox Code Playgroud)
来自杂志:
Apr 20 20:32:35 aubrey dbus-daemon[1180]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' requested by ':1.134190' (uid=1000 pid=1450204 comm="nautilus " label="unconfined")
Apr 20 20:32:35 aubrey systemd[1]: Starting Hostname Service...
Apr 20 20:32:35 aubrey dbus-daemon[1180]: [system] Successfully activated service 'org.freedesktop.hostname1'
Apr 20 20:32:35 aubrey systemd[1]: Started Hostname Service.
Apr 20 20:32:35 aubrey nautilus[1450204]: Called "net usershare info" but it failed: Failed to execute child process “net” (No such file or directory)
Apr 20 20:32:45 aubrey ddclient[1450366]: WARNING: file /var/cache/ddclient/ddclient.cache, line 3: Invalid Value for keyword 'ip' =
Run Code Online (Sandbox Code Playgroud)
编辑:
上面的跟踪只是输出strace -t -o /tmp/nautilus nautilus- 一个非常详细的日志,但是tail -f我可以在它挂起的地方检查它,这是我看到一个条目的地方,例如20:15:32 poll([{fd=7, events=POLLIN}], 1, 25000) = 0 (Timeout)后面跟着 30+ 秒的空(然后它开始并且再次非常冗长)。
lsof 报告的 fd,如果我没看错的话,看起来像:
nautilus 1719429 coljac 7u a_inode 0,13 0 17491 [eventfd]
来自顶部的条目strace -c nautilus如下(是的,民意调查是第一):
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
22.70 0.011333 2 3988 poll
16.55 0.008265 1 5018 4490 stat
9.31 0.004647 2 1966 131 futex
7.73 0.003859 1 2119 1385 recvmsg
7.33 0.003660 1 3612 1441 openat
4.76 0.002375 2 1038 436 access
4.29 0.002140 1 1424 read
3.60 0.001799 1 1356 105 readlink
3.50 0.001748 0 1868 mmap
3.30 0.001646 8 188 getdents64
3.14 0.001568 0 2232 close
2.38 0.001188 0 1758 fstat
2.14 0.001067 0 1150 munmap
1.99 0.000993 2 337 writev
1.67 0.000833 92 9 clone
1.57 0.000782 2 367 write
1.47 0.000733 3 190 mprotect
Run Code Online (Sandbox Code Playgroud)
输出lsof | wc -l:1340334
编辑2:
目前,thunar 根本无法打开 - 它会失败并显示消息Failed to register: Timeout was reached。输出strace -c thunar如下:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
50.53 0.002814 3 882 792 openat
28.21 0.001571 4 354 mmap
4.79 0.000267 2 96 read
3.75 0.000209 2 90 fstat
3.54 0.000197 2 96 close
3.48 0.000194 1 109 mprotect
1.87 0.000104 5 18 poll
1.45 0.000081 0 165 1 futex
1.31 0.000073 2 28 write
...
Run Code Online (Sandbox Code Playgroud)
如果我运行,strace -t thunar我也会在它挂起之前在输出中看到这个:
futex(0x564445b9ff70, FUTEX_WAKE_PRIVATE, 1) = 1
poll([{fd=7, events=POLLIN}], 1, 25000) = 1 ([{fd=7, revents=POLLIN}])
read(7, "\1\0\0\0\0\0\0\0", 16) = 8
poll([{fd=7, events=POLLIN}], 1, 25000
Run Code Online (Sandbox Code Playgroud)
lsof -p <pid> 返回以下内容:
thunar 2036483 coljac 7u a_inode 0,13 0 17491 [eventfd]
Run Code Online (Sandbox Code Playgroud)
还有一些strace thunar无法打开的outout from是:
20:29:32 read(7, "\1\0\0\0\0\0\0\0", 16) = 8
20:29:32 poll([{fd=7, events=POLLIN}], 1, 25000) = 0 (Timeout)
20:29:58 write(7, "\1\0\0\0\0\0\0\0", 8) = 8
20:29:58 futex(0x5566ad906ba0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
20:29:58 close(7) = 0
20:29:58 write(6, "\1\0\0\0\0\0\0\0", 8) = 8
20:29:58 futex(0x5566ad8e1f70, FUTEX_WAKE_PRIVATE, 1) = 1
20:29:58 futex(0x5566ad8e1b90, FUTEX_WAKE_PRIVATE, 1) = 1
20:29:58 futex(0x5566ad8d9058, FUTEX_WAKE_PRIVATE, 1) = 1
20:29:58 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/charset.alias", O_RDONLY) = -1 ENOENT (No such file or directory)
20:29:58 write(2, "Failed to register: Timeout was "..., 40) = 40
20:29:58 poll([{fd=4, events=POLLIN}], 1, 0) = 1 ([{fd=4, revents=POLLIN}])
20:29:58 read(4, "\1\0\0\0\0\0\0\0", 16) = 8
20:29:58 futex(0x7f0dccfb72a0, FUTEX_WAKE_PRIVATE, 1) = 1
20:29:58 poll([{fd=4, events=POLLIN}], 1, 0) = 0 (Timeout)
Run Code Online (Sandbox Code Playgroud)
进一步的 strace 输出在 pastebin 上。
mxm*_*nkn 28
多年来我一直遇到同样的问题,因为我经常有至少一个月的正常运行时间。一段时间后,所有使用系统提供的文件打开对话框的程序似乎都会挂起或等待很多分钟。
pkill gvfsd-trash
Run Code Online (Sandbox Code Playgroud)
应该解决这个问题,所有挂起并等待文件对话框的程序应该在杀死后立即恢复工作gvfsd-trash。
另一件需要注意的事情是gvfsd-trash,一段时间后可能会通过caja或任何其他文件浏览器或通过系统文件打开对话框本身重新启动。这不是我遇到的第一个问题gvfsd-trash,我开始怀恨在心,但是,我不想卸载gvfsd,我需要它来通过 MTP 安装 USB 拇指驱动器和我的智能手机。因此,我选择了暴力解决方案,并仅使gvfsd-trash二进制文件不可访问,例如,通过重命名它:
sudo mv /usr/libexec/{gvfsd-trash,.bak}
Run Code Online (Sandbox Code Playgroud)
它可能位于不同系统上的另一个位置,请尝试询问您的数据包管理器,例如,通过调用:
dpkg -L gvfs-daemons | grep trash
Run Code Online (Sandbox Code Playgroud)
当心其影响。如果没有,gvfsd-trash您将无法trash:///通过文件浏览器访问特殊的 URI 路径!就我个人而言,无论如何我从未使用过它。.Trash您还可以在每个挂载点和您家中存在的文件夹中手动访问已删除的文件,例如:
~/.local/share/Trash/media/mounted-external-harddrive/.Trash看起来问题是 gvfsd-trash 和 D-Bus 的组合。gvfs bugtracker 中似乎存在一个合适的问题,该问题已被修复,但尚未推广到我的系统中。
多年来,我使用了不同的解决方案,即在新的 DBus 会话中启动每个程序,在最重要的程序(如 Firefox 和文本编辑器)前面加上dbus-launch. 然而,这也带来了一些问题,因为每个会话将产生至少 5 个gvfsd进程以及可能的其他进程,并且 D-Bus 会话不会通过关闭其中打开的程序来关闭,并且 D-Bus 会话总数是有限的,所以一段时间后,您将无法启动程序。
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |