2011-09-23 42 views
10

我意識到還有一些關於爲什麼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',輸出有點羅嗦。我在這裏找什麼? –

回答

0

所以我從來沒有真正解決了這個。換了一臺新電腦。

最終出現類似問題,問題是NVIDIA驅動程序軟件 - 不是實際的驅動程序本身。

因此,路徑爲:

  • 安裝NDIVIA驅動程序
  • 從APPWIZ.CPL
  • 刪除NVIDIA軟件
  • 使用硬件管理器發現,留給周圍
0

我有這個經驗不多,但我至少可以給你什麼它看起來像我的意見。

我看到很多[proc_wiater]行,每行超過5000 ...比實際的目錄列出時間要長:/看起來這裏的問題是「ls是程序」。我敢打賭,如果你計時,你不會注意到這樣荒謬的時間。

- 有人對strace一無所知。

0

它創建一個髒日誌文件,使用awk。

相關問題