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
所以我从来没有真正解决了这个。换了一台新电脑。
最终出现类似问题,问题是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
的.inf文件它是否必须来自'bash'?如果您从资源管理器运行ls.exe,会发生什么? (不知道这是可能的...) – Thomas
你也可以尝试使用'strace'来判断系统调用是否缓慢。 – Thomas
@Thomas - 我不熟悉'strace',输出有点罗嗦。我在这里找什么? –