Cygwin的bash在出现错误后变得非常缓慢

问题描述:

我意识到还有一些关于为什么Cygwin显然很慢的问题,但这种情况似乎是独一无二的。Cygwin的bash在出现错误后变得非常缓慢

我有一些问题报告了很多错误,然后在重新启动后,从bash启动的任何进程都非常缓慢。我真的不知道是什么原因造成了这种情况(我在taskmgr中检查了进程的优先级,这仍然是正常的)。

详情:

我当时正在浸泡的一些插座测试代码过夜,回来在早上发现我的屏幕上有错误淹没(DialogBoxes - 主要是试图访问NULL指针),以及相当几件事发送到命令行。有很多文本我无法捕捉到(电脑大多没有响应,我不得不手动重启它)。我确实记得一些引用“Win32 error 6”的文本(我假设它的意思是INVALID HANDLE)。

重启后,大部分情况都很好,但是Cygwin/bash仍然没有响应。我跑以下,作为另一个问题建议:

$ time for i in {1..10} ; do bash -c "echo Hello" ; done 
... 
real 1m12.244s 
user 0m3.522s 
sys  0m34.460s 

调用另一个bash的情况下是没有必要的可怕速度:

$ time for i in {1..10}; do ls ; done  
# nb there are about 6 entries in pwd 
.... 
real 0m47.718s 
user 0m2.568s 
sys  0m23.411s 

虽然内建似乎走的速度不够快:

$ time for i in {1..10} ; do echo Hello ; done 
.... 
real 0m0.001s 
user 0m0.000s 
sys  0m0.000s 

更新: 我刚刚意识到在当时和现在之间安装的Windows Update。我很高兴这不是太复杂或任何事情。 (虽然,我相信其他同事已经安装了更新并且没有看到问题)。

更新2:

要回答以下评论,位于/ bin文件执行,而不从CMD任何问题。此外,我完全删除并重新下载我的cygwin安装目录,问题仍在发生。

我还没有完全确定如何使用Cygwin的strace,但我认为第一列可能是时间三角洲。考虑到这一点,这里看起来有问题的几线(0xDEADBEEF肯定是不鼓励):

4100175 4101564 [main] bash 5664 _cygtls::remove: wait 0xFFFFFFFF 
4278898 4279724 [main] bash 5612 child_copy: dll bss - hp 0x628 low 0x611DC000, high 0x612108D0, res 1 
2210923 25635973 [proc_waiter] bash 5664 pinfo::maybe_set_exit_code_from_windows: pid 5400, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000 
3595425 16085618 [proc_waiter] bash 5612 pinfo::maybe_set_exit_code_from_windows: pid 5376, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000 
3057452 19149209 [proc_waiter] bash 5664 pinfo::maybe_set_exit_code_from_windows: pid 5612, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000 
2631997 38835042 [proc_waiter] bash 5716 pinfo::maybe_set_exit_code_from_windows: pid 5720, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000 
2610852 38836658 [main] bash 4624 _cygtls::remove: wait 0xFFFFFFFF 
3708283 42556365 [proc_waiter] bash 5716 pinfo::maybe_set_exit_code_from_windows: pid 4624, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000 
3666884 42562053 [main] bash 5664 fhandler_base_overlapped::wait_overlapped: GetOverLappedResult failed, bytes 0 
2742397 45305871 [proc_waiter] bash 5664 pinfo::maybe_set_exit_code_from_windows: pid 5716, exit value - old 0x8000000, windows 0xDEADBEEF, cygwin 0x8000000 
45322195 45322997 [main] bash 3996 child_copy: dll bss - hp 0x62C low 0x611DC000, high 0x612108D0, res 1 
4247577 49581019 [main] bash 3996 _cygtls::remove: wait 0xFFFFFFFF 
4266690 49581325 [main] bash 5664 child_info::sync: pid 3996, WFMO returned 0, res 1 
49622099 49623318 [main] bash 4840 child_copy: dll bss - hp 0x690 low 0x611DC000, high 0x612108D0, res 1 
4225718 53860809 [main] bash 4840 _cygtls::remove: wait 0xFFFFFFFF 
4248491 53861119 [main] bash 3996 child_info::sync: pid 4840, WFMO returned 0, res 1 
2167422 2169463 [main] bash 1412 _cygtls::remove: wait 0xFFFFFFFF 
10369 2205831 [main] bash 1412 pwdgrp::load: \etc\passwd curr_lines 4082 
10313 2237148 [main] bash 1412 cygwin_gethostname: name A119894 
14720 2251868 [main] bash 1412 stat64: entering 
+0

的.inf文件它是否必须来自'bash'?如果您从资源管理器运行ls.exe,会发生什么? (不知道这是可能的...) – Thomas

+0

你也可以尝试使用'strace'来判断系统调用是否缓慢。 – Thomas

+0

@Thomas - 我不熟悉'strace',输出有点罗嗦。我在这里找什么? –

所以我从来没有真正解决了这个。换了一台新电脑。

最终出现类似问题,问题是NVIDIA驱动程序软件 - 不是实际的驱动程序本身。

因此,路径为:

  • 安装NDIVIA驱动程序
  • 从APPWIZ.CPL
  • 删除NVIDIA软件
  • 使用硬件管理器发现,留给周围

我有这个经验不多,但我至少可以给你什么它看起来像我的意见。

我看到很多[proc_wiater]行,每行超过5000 ...比实际的目录列出时间要长:/看起来这里的问题是“ls是程序”。我敢打赌,如果你计时,你不会注意到这样荒谬的时间。

- 有人对strace一无所知。

它创建一个脏日志文件,使用awk。

我有类似的问题,通过删除断开的网络共享来解决。

http://cygwin.com/faq/faq-nochunks.html#faq.using.slow
http://cygwin.com/ml/cygwin/2010-06/msg00510.html(读取所有回复)

你可以看看这个还有:

http://cygwin.com/acronyms/#BLODA

GL