Cygwin bash стал чрезвычайно медленным после ошибок

Я понимаю, что есть еще несколько вопросов о том, почему Cygwin, по-видимому, медленный, но этот случай кажется уникальным.

У меня были некоторые проблемы, когда в сообщениях сообщалось множество ошибок, а затем после перезагрузки любой процесс, запущенный из 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

Update: Я только что понял, что 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

Ответ 1

Поэтому я никогда не решал этого. Вместо этого появился новый компьютер.

Аналогичная проблема возникла в итоге, и проблема была в драйвере NVIDIA - не самих драйверов.

Итак, путь был:

  • Установите драйверы NDIVIA
  • Удалить программное обеспечение NVIDIA из AppWiz.cpl
  • С помощью Hardware Manager найдите файлы .inf, которые остались рядом

Ответ 3

У меня мало опыта с этим, но я могу хотя бы дать вам свое мнение о том, как это выглядит.

Я вижу много строк [proc_wiater], каждый из которых превышает 5000... что дольше, чем ваш фактический список каталогов:/Похоже, проблема здесь: "ls - это программа". Бьюсь об заклад, если вы приурочили время, вы не заметите такого смешного времени.

-Кто-то, кто ничего не знает о strace.

Ответ 4

Он создает грязный файл журнала, используя awk.