【发布时间】:2015-02-13 19:13:35
【问题描述】:
几个月来,我一直在 Windows CMD 提示符下使用 Cygwin 命令,没有出现任何问题。在过去的几天里,每次我调用 Cygwin 命令(例如ls)时,该命令在实际运行之前都需要几秒钟来“加载”。如果我在 bash 提示符下尝试相同的命令,它会立即运行(“加载”)。
Cygwin FAQ 提到 PATH 中的网络驱动器可能会导致问题,因此我尝试了我的 PATH 变量和网络连接的一些排列。下面,“全PATH”表示我原来的路径设置; “short PATH”表示只有 Cygwin bin 目录的路径。通过time 命令报告时间。
ls 的计时结果
已连接到网络:
- 在
bash内运行ls:0.124 秒 - 在 CMD 中运行
ls(完整PATH):41.29 秒 - 在 CMD 内运行
ls(短PATH):38.56 秒
从网络断开:
- 在
bash内运行ls:0.125 秒 - 在 CMD 中运行
ls(完整PATH):0.17 秒 - 在 CMD 中运行
ls(短PATH):0.19 秒
cygcheck 的结果
我跑cygcheck -s 并注意到:
Warning: There are multiple cygwin1.dlls on your path
虽然这可能是由于在 Cygwin 的 bin 目录中运行 cygcheck 造成的。我完全卸载并重新安装了 Cygwin,仍然看到同样的问题。
netstat 的结果
在执行 Cygwin 的 ls 之前和执行之后(当它停止时),我运行了 netstat -a -n。我这样做了几次,发现每次运行中都有一行在延迟期间始终出现:
UDP 127.0.0.1:55030 *:*
端口号从测试更改为测试。
strace 结果
我在 ls 命令上运行了 Cygwin 的 strace。大部分延迟都花在了以下调用中:
11685 886560 [main] ls 10020 pwdgrp::fetch_account_from_windows: line: <xxxx>
和
12684 899244 [main] ls 10020 cyg_ldap::fetch_ad_account: No entry for (objectSid=\00\00\00\00) in xxxx DC=xxxx,DC=xxxx,DC=xxxx
【问题讨论】:
-
这是一台工作电脑;我无法禁用防病毒软件(甚至无法测试)。
-
我已验证未更改的 PATH 中的所有目录都存在并且是本地的。
-
所以现在断开网络可以让一切更快?这与您最初发布的结果不一致。考虑使用进程监视器(可从 MS 网站获得)来检查进程在长时间延迟期间正在做什么。
-
@HarryJohnston,是的,我第一次肯定做错了什么。也只有当我连接到我公司的网络时(所以在家里,通过 VPN 连接时)。也许它与防病毒有关。我会试试进程监视器。
-
大多数提供 VPN 隧道的公司网络不允许使用split tunneling(即,当隧道连接时,默认路由会更改公司 VPN 端点)。