CMD 中的 Cygwin 命令很慢;来自 bash 的速度很快
Cygwin commands from CMD are slow; from bash are fast
几个月来,我一直在 Windows CMD 提示符下使用 Cygwin 命令,没有出现任何问题。在过去的几天里,每次我调用 Cygwin 命令(例如 ls
)时,该命令在实际 运行 之前需要几秒钟到 "load"。如果我在 bash 提示符下尝试相同的命令,它会立即 运行s ("loads")。
Cygwin FAQ 提到 PATH 中的网络驱动器可能会导致问题,因此我尝试了 PATH
变量和网络连接的一些排列。下面,"full PATH
"表示我原来的路径设置; "short PATH
"表示只有Cygwin bin目录的路径。时间通过 time
命令报告。
ls
的计时结果
已连接到网络:
- 运行
ls
bash
: 0.124 秒
- 运行
ls
在 CMD 内(完整 PATH
):41.29 秒
- 运行
ls
在 CMD 内(短 PATH
):38.56 秒
已断开网络连接:
- 运行
ls
bash
: 0.125 秒
- 运行
ls
在 CMD 内(完整 PATH
):0.17 秒
- 运行
ls
在 CMD 内(短 PATH
):0.19 秒
cygcheck
的结果
我 运行 cygcheck -s
并注意到:
Warning: There are multiple cygwin1.dlls on your path
尽管这可能是由于来自 Cygwin 的 bin
目录的 运行ning cygcheck
。我完全卸载并重新安装了 Cygwin,但仍然看到同样的问题。
结果来自 netstat
I 运行 netstat -a -n
在执行 Cygwin 的 ls
之前和执行之后(当它停止时)。我这样做了好几次,发现每个 运行 中的一行在延迟期间始终出现:
UDP 127.0.0.1:55030 *:*
端口号从测试更改为测试。
strace
结果
我 运行 Cygwin 的 strace
上的 ls
命令。大部分延迟都花在调用中,例如:
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=[=14=][=14=][=14=][=14=]) in xxxx DC=xxxx,DC=xxxx,DC=xxxx
Cygwin 常见问题解答中的 section 解决了启动时间慢的问题。 Cygwin 最近更改为使用 Active Directory 查找进行身份验证,而不是使用平面文件。从
更改 /etc/nsswitch.conf
中的默认值
passwd: files db
group: files db
到
passwd: files
group: files
跳过 AD 查找。我的 Cygwin 命令现在又变快了。
几个月来,我一直在 Windows CMD 提示符下使用 Cygwin 命令,没有出现任何问题。在过去的几天里,每次我调用 Cygwin 命令(例如 ls
)时,该命令在实际 运行 之前需要几秒钟到 "load"。如果我在 bash 提示符下尝试相同的命令,它会立即 运行s ("loads")。
Cygwin FAQ 提到 PATH 中的网络驱动器可能会导致问题,因此我尝试了 PATH
变量和网络连接的一些排列。下面,"full PATH
"表示我原来的路径设置; "short PATH
"表示只有Cygwin bin目录的路径。时间通过 time
命令报告。
ls
的计时结果
已连接到网络:
- 运行
ls
bash
: 0.124 秒 - 运行
ls
在 CMD 内(完整PATH
):41.29 秒 - 运行
ls
在 CMD 内(短PATH
):38.56 秒
已断开网络连接:
- 运行
ls
bash
: 0.125 秒 - 运行
ls
在 CMD 内(完整PATH
):0.17 秒 - 运行
ls
在 CMD 内(短PATH
):0.19 秒
cygcheck
的结果
我 运行 cygcheck -s
并注意到:
Warning: There are multiple cygwin1.dlls on your path
尽管这可能是由于来自 Cygwin 的 bin
目录的 运行ning cygcheck
。我完全卸载并重新安装了 Cygwin,但仍然看到同样的问题。
结果来自 netstat
I 运行 netstat -a -n
在执行 Cygwin 的 ls
之前和执行之后(当它停止时)。我这样做了好几次,发现每个 运行 中的一行在延迟期间始终出现:
UDP 127.0.0.1:55030 *:*
端口号从测试更改为测试。
strace
结果
我 运行 Cygwin 的 strace
上的 ls
命令。大部分延迟都花在调用中,例如:
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=[=14=][=14=][=14=][=14=]) in xxxx DC=xxxx,DC=xxxx,DC=xxxx
Cygwin 常见问题解答中的 section 解决了启动时间慢的问题。 Cygwin 最近更改为使用 Active Directory 查找进行身份验证,而不是使用平面文件。从
更改/etc/nsswitch.conf
中的默认值
passwd: files db
group: files db
到
passwd: files
group: files
跳过 AD 查找。我的 Cygwin 命令现在又变快了。