LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1022|回复: 3

GTK程序启动速度很慢。

[复制链接]
发表于 2007-12-28 10:34:30 | 显示全部楼层 |阅读模式
这个问题很久了,上次升级gnome到 2.20的时候出现的,第一次打开gtk程序很慢。由于我是用gnome的,而且没有用过kde程序,所以几乎所有程序都有这个问题.所谓第一次打开就是说如何这个程序没有打开过,那么它启动就很慢,但是如果已经打开了一个,那么它启动就不是那么慢了。最典型的就是终端,我不得不每次开机都打开一个终端放到一个不用的桌面上,因为它启动非常慢,大约要3~5秒钟,但是开了这个终端后再打开其他终端就不是那么慢了,大约在1秒钟不到就出来了。

而打开非gtk程序,例如xterm,就很快,瞬间就启动了。

我用strace查看第一次启动gnome-terminal程序的系统调用,发现最耗时间的是一些poll操作,以下是耗时TOP 5:
  1. [b7f92410] poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=11, events=POLLIN|POLLPRI}, {fd=12, events=POLLIN|POLLPRI}, {fd=13,events=POLLIN|POLLPRI}, {fd=15, events=POLLIN|POLLPRI}, {fd=14,events=POLLIN|POLLPRI}, {fd=10, events=POLLIN|POLLPRI}, {fd=16, events=POLLIN}], 10, 600) = 0 <0.603461>
  2. [b7f92410] poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=11, events=POLLIN|POLLPRI}, {fd=12, events=POLLIN|POLLPRI}, {fd=13,events=POLLIN|POLLPRI}, {fd=15, events=POLLIN|POLLPRI}, {fd=14,events=POLLIN|POLLPRI}, {fd=10, events=POLLIN|POLLPRI}, {fd=16, events=POLLIN}], 10, 599) = 0 <0.603017>
  3. [b7f92410] poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=11, events=POLLIN|POLLPRI}, {fd=12, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN|POLLPRI}, {fd=15, events=POLLIN|POLLPRI}, {fd=14, events=POLLIN|POLLPRI}, {fd=10, events=POLLIN|POLLPRI}, {fd=16, events=POLLIN}], 10, 600) = 0 <0.601351>
  4. [b7f92410] poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=11, events=POLLIN|POLLPRI}, {fd=12, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN|POLLPRI}, {fd=15, events=POLLIN|POLLPRI}, {fd=14, events=POLLIN|POLLPRI}, {fd=10, events=POLLIN|POLLPRI}, {fd=16, events=POLLIN}], 10, 599) = 0 <0.601286>
  5. [b7f92410] poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=11, events=POLLIN|POLLPRI}, {fd=12, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN|POLLPRI}, {fd=15, events=POLLIN|POLLPRI}, {fd=14, events=POLLIN|POLLPRI}, {fd=10, events=POLLIN|POLLPRI}, {fd=16, events=POLLIN}], 10, 600) = 0 <0.600806>
复制代码

可以发现都是写poll操作:那么这些fd在b7f92410打开的都是什么呢?
  1. [b7f92410] open("/usr/share/locale/locale.alias", O_RDONLY) = 3 <0.000012>
  2. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_IDENTIFICATION", O_RDONLY) = 3 <0.000011>
  3. [b7f92410] open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3 <0.000011>
  4. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_MEASUREMENT", O_RDONLY) = 3 <0.000010>
  5. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_TELEPHONE", O_RDONLY) = 3 <0.000014>
  6. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_ADDRESS", O_RDONLY) = 3 <0.000010>
  7. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_NAME", O_RDONLY) = 3 <0.000010>
  8. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_PAPER", O_RDONLY) = 3 <0.000010>
  9. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_MESSAGES", O_RDONLY) = 3 <0.000011>
  10. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY) = 3 <0.000011>
  11. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_MONETARY", O_RDONLY) = 3 <0.000011>
  12. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_COLLATE", O_RDONLY) = 3 <0.000010>
  13. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_TIME", O_RDONLY) = 3 <0.000010>
  14. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_NUMERIC", O_RDONLY) = 3 <0.000010>
  15. [b7f92410] open("/usr/lib/locale/zh_CN.utf8/LC_CTYPE", O_RDONLY) = 3 <0.000010>
  16. [b7f92410] open("/usr/share/locale/zh_CN/LC_MESSAGES/gtk20.mo", O_RDONLY) = 3 <0.000012>
  17. [b7f92410] open("/usr/share/X11/locale/locale.alias", O_RDONLY) = 3 <0.000013>
  18. [b7f92410] open("/usr/share/X11/locale/locale.alias", O_RDONLY) = 3 <0.000010>
  19. [b7f92410] open("/usr/share/X11/locale/locale.dir", O_RDONLY) = 3 <0.000012>
  20. [b7f92410] open("/usr/share/X11/locale/zh_CN.UTF-8/XLC_LOCALE", O_RDONLY) = 3 <0.000011>
  21. [b7f92410] open("/etc/nsswitch.conf", O_RDONLY) = 3 <0.000011>
  22. [b7f92410] open("/etc/passwd", O_RDONLY|0x80000 /* O_??? */) = 3 <0.000010>
  23. [b7f92410] open("/usr/share/locale/zh_CN/LC_MESSAGES/gtk20-properties.mo", O_RDONLY) = 3 <0.000012>
  24. [b7f92410] open("/home/crazyapple/.Xauthority", O_RDONLY) = 4 <0.000010>
  25. [b7f92410] open("/home/crazyapple/.ICEauthority", O_RDONLY) = 11 <0.000010>
  26. [b7f92410] open("/home/crazyapple/.ICEauthority", O_RDONLY) = 11 <0.000009>
  27. [b7f92410] open("/home/crazyapple/.ICEauthority", O_RDONLY) = 11 <0.000009>
  28. [b7f92410] open("/home/crazyapple/.ICEauthority", O_RDONLY) = 11 <0.000009>
  29. [b7f92410] open("/tmp/gconfd-crazyapple/lock/ior", O_RDONLY) = 11 <0.000014>
  30. [b7f92410] open("/tmp/orbit-crazyapple/bonobo-activation-register.lock", O_RDWR|O_CREAT, 0700) = 14 <0.000016>
  31. [b7f92410] open("/tmp/orbit-crazyapple/bonobo-activation-server-ior", O_RDONLY) = 15 <0.000010>
  32. [b7f92410] open("/usr/share/pixmaps/gnome-terminal.png", O_RDONLY|O_LARGEFILE) = 16 <0.000013>
  33. [b7f92410] open("/etc/gtk-2.0/gtkrc", O_RDONLY|O_LARGEFILE) = 16 <0.000010>
  34. [b7f92410] open("/usr/share/themes/Glossy/gtk-2.0/gtkrc", O_RDONLY|O_LARGEFILE) = 16 <0.000010>
  35. [b7f92410] open("/usr/share/themes/Default/gtk-2.0-key/gtkrc", O_RDONLY|O_LARGEFILE) = 16 <0.000010>
  36. [b7f92410] open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 16 <0.000018>
  37. [b7f92410] open("/usr/share/vte/termcap/xterm", O_RDONLY|O_LARGEFILE) = 16 <0.000011>
  38. [b7f92410] open("/etc/pango/pango.modules", O_RDONLY) = 16 <0.000011>
  39. [b7f92410] open("/etc/fonts/fonts.conf", O_RDONLY) = 16 <0.000010>
  40. [b7f92410] open("/var/cache/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-x86.cache-2", O_RDONLY) = 16 <0.000013>
  41. [b7f92410] open("/var/cache/fontconfig/df311e82a1a24c41a75c2c930223552e-x86.cache-2", O_RDONLY) = 16 <0.000012>
  42. [b7f92410] open("/var/cache/fontconfig/17090aa38d5c6f09fb8c5c354938f1d7-x86.cache-2", O_RDONLY) = 16 <0.000011>
  43. [b7f92410] open("/var/cache/fontconfig/d62e99ef547d1d24cdb1bd22ec1a2976-x86.cache-2", O_RDONLY) = 16 <0.000010>
  44. [b7f92410] open("/var/cache/fontconfig/0d18838e2eb2d05c78885ab659ed50db-x86.cache-2", O_RDONLY) = 16 <0.000011>
  45. [b7f92410] open("/var/cache/fontconfig/f73c51d6200a78c2054c26a5b2398976-x86.cache-2", O_RDONLY) = 16 <0.000010>
  46. [b7f92410] open("/home/crazyapple/.fontconfig/f73c51d6200a78c2054c26a5b2398976-x86.cache-2", O_RDONLY) = 16 <0.000011>
  47. [b7f92410] open("/usr/share/fonts/arphicfonts", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000009>
  48. [b7f92410] open("/var/cache/fontconfig/61c91b4f4892ffae4bc0efef540a1e5d-x86.cache-2", O_RDONLY) = 16 <0.000012>
  49. [b7f92410] open("/home/crazyapple/.fontconfig/61c91b4f4892ffae4bc0efef540a1e5d-x86.cache-2", O_RDONLY) = 16 <0.000011>
  50. [b7f92410] open("/usr/share/fonts/baekmuk-fonts", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000009>
  51. [b7f92410] open("/var/cache/fontconfig/4b5cf4386f1cde02a336ba961b4ac82d-x86.cache-2", O_RDONLY) = 16 <0.000011>
  52. [b7f92410] open("/home/crazyapple/.fontconfig/4b5cf4386f1cde02a336ba961b4ac82d-x86.cache-2", O_RDONLY) = 16 <0.000011>
  53. [b7f92410] open("/usr/share/fonts/corefonts", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000009>
  54. [b7f92410] open("/var/cache/fontconfig/2d31a572ce6667f6a0da9c8dc611898b-x86.cache-2", O_RDONLY) = 16 <0.000011>
  55. [b7f92410] open("/home/crazyapple/.fontconfig/2d31a572ce6667f6a0da9c8dc611898b-x86.cache-2", O_RDONLY) = 16 <0.000011>
  56. [b7f92410] open("/usr/share/fonts/cyrillic", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000010>
  57. [b7f92410] open("/var/cache/fontconfig/0251a5afa6ac727a1e32b7d4d4aa7cf0-x86.cache-2", O_RDONLY) = 16 <0.000011>
  58. [b7f92410] open("/home/crazyapple/.fontconfig/0251a5afa6ac727a1e32b7d4d4aa7cf0-x86.cache-2", O_RDONLY) = 16 <0.000010>
  59. [b7f92410] open("/usr/share/fonts/default", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000010>
  60. [b7f92410] open("/var/cache/fontconfig/a1c95d6dfc9a7b34f44445cf81166004-x86.cache-2", O_RDONLY) = 16 <0.000011>
  61. [b7f92410] open("/home/crazyapple/.fontconfig/a1c95d6dfc9a7b34f44445cf81166004-x86.cache-2", O_RDONLY) = 16 <0.000010>
  62. [b7f92410] open("/usr/share/fonts/encodings", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000009>
  63. [b7f92410] open("/var/cache/fontconfig/1a21276ee10c19eef148b044d48c5704-x86.cache-2", O_RDONLY) = 16 <0.000010>
  64. [b7f92410] open("/home/crazyapple/.fontconfig/1a21276ee10c19eef148b044d48c5704-x86.cache-2", O_RDONLY) = 16 <0.000010>
  65. [b7f92410] open("/usr/share/fonts/kochi-substitute", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000010>
  66. [b7f92410] open("/var/cache/fontconfig/8d4af663993b81a124ee82e610bb31f9-x86.cache-2", O_RDONLY) = 16 <0.000011>
  67. [b7f92410] open("/var/cache/fontconfig/26a4708ae8adaf81babc9f63580e6f31-x86.cache-2", O_RDONLY) = 16 <0.000011>
  68. [b7f92410] open("/var/cache/fontconfig/76fa4b957c916922374347f144bde9da-x86.cache-2", O_RDONLY) = 16 <0.000010>
  69. [b7f92410] open("/var/cache/fontconfig/4b172ca7f111e3cffadc3636415fead9-x86.cache-2", O_RDONLY) = 16 <0.000010>
  70. [b7f92410] open("/home/crazyapple/.fontconfig/4b172ca7f111e3cffadc3636415fead9-x86.cache-2", O_RDONLY) = 16 <0.000010>
  71. [b7f92410] open("/usr/share/fonts/util", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000009>
  72. [b7f92410] open("/var/cache/fontconfig/87f5e051180a7a75f16eb6fe7dbd3749-x86.cache-2", O_RDONLY) = 16 <0.000011>
  73. [b7f92410] open("/home/crazyapple/.fontconfig/87f5e051180a7a75f16eb6fe7dbd3749-x86.cache-2", O_RDONLY) = 16 <0.000010>
  74. [b7f92410] open("/usr/share/fonts/default/ghostscript", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000010>
  75. [b7f92410] open("/var/cache/fontconfig/5ca8086aeacc9c68e81a71e7ef846b3b-x86.cache-2", O_RDONLY) = 16 <0.000011>
  76. [b7f92410] open("/home/crazyapple/.fontconfig/5ca8086aeacc9c68e81a71e7ef846b3b-x86.cache-2", O_RDONLY) = 16 <0.000010>
  77. [b7f92410] open("/usr/share/fonts/encodings/large", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 16 <0.000010>
  78. [b7f92410] open("/usr/share/fonts/myttf/VeraSansYuanTiMono-Regular.ttf", O_RDONLY) = 16 <0.000016>
  79. [b7f92410] open("/usr/share/fonts/myttf/VeraSansYuanTiMono-Regular.ttf", O_RDONLY) = 16 <0.000019>
  80. [b7f92410] open("/usr/share/fonts/ttf-bitstream-vera/Vera.ttf", O_RDONLY) = 16 <0.000017>
  81. [b7f92410] open("/usr/share/fonts/corefonts/verdana.ttf", O_RDONLY) = 16 <0.000012>
  82. [b7f92410] open("/usr/share/fonts/corefonts/arial.ttf", O_RDONLY) = 16 <0.000011>
  83. [b7f92410] open("/usr/share/fonts/Type1/l048013t.pfa", O_RDONLY) = 16 <0.000012>
  84. [b7f92410] open("/usr/share/fonts/default/ghostscript/n019003l.pfb", O_RDONLY) = 16 <0.000014>
  85. [b7f92410] open("/usr/share/fonts/75dpi/helvR12-ISO8859-1.pcf.gz", O_RDONLY) = 16 <0.000013>
  86. [b7f92410] open("/usr/share/fonts/75dpi/helvR12.pcf.gz", O_RDONLY) = 16 <0.000012>
  87. [b7f92410] open("/usr/share/fonts/kochi-substitute/kochi-gothic-subst.ttf", O_RDONLY) = 16 <0.000013>
  88. [b7f92410] open("/usr/share/fonts/arphicfonts/bkai00mp.ttf", O_RDONLY) = 16 <0.000012>
  89. [b7f92410] open("/usr/share/fonts/baekmuk-fonts/dotum.ttf", O_RDONLY) = 16 <0.000013>
  90. [b7f92410] open("/etc/gtk-2.0/gtk.immodules", O_RDONLY|O_LARGEFILE) = 16 <0.000013>
  91. [b7f92410] open("/usr/share/X11/locale/compose.dir", O_RDONLY) = 16 <0.000013>
  92. [b7f92410] open("/usr/share/pixmaps/gnome-terminal.png", O_RDONLY|O_LARGEFILE) = 16 <0.000012>
  93. [b7f92410] open("/dev/null", O_RDONLY)  = 16 <0.000017>
复制代码
部分fd根本就没有打开过。
fd具体的对应关系估计得编程找,现在只好罗列出来。
请大家帮我看看,估计是什么原因?附上strace 导出的文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2007-12-28 16:47:41 | 显示全部楼层
socket系统调用也返回fd
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-29 12:50:28 | 显示全部楼层
tarce好麻烦,请问大大如何才能有可能找到问题之所在呢?
回复 支持 反对

使用道具 举报

发表于 2007-12-29 13:16:37 | 显示全部楼层
或者你干脆用gdb算了
参考 gentoo bug report guide
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表