【问题标题】:Cygwin commands from CMD are slow; from bash are fast来自 CMD 的 Cygwin 命令很慢;来自 bash 的速度很快
【发布时间】: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 端点)。

标签: windows cygwin


【解决方案1】:

Cygwin 的常见问题解答中的 section 解决了启动时间缓慢的问题。 Cygwin 最近更改为使用 Active Directory 查找进行身份验证,而不是使用平面文件。更改 /etc/nsswitch.conf 中的默认值来自

passwd:   files db
group:    files db

passwd:   files
group:    files

跳过 AD 查找。我的 Cygwin 命令现在又快了。

【讨论】:

  • 奇数;我想知道为什么它首先需要查找任何内容? ls 命令默认不显示组和所有者,IIRC。
  • 你是救生员!如果可以的话,我会投票两次:-)
  • 修改 nsswitch.conf 后出现以下错误:错误:无法 fork 子进程:没有可用的终端 (-1)。
  • 我没有进行此答案中建议的更改,而是转到 cygwin 中的链接部分并按照说明进行操作(使用选项 2)。现在速度更快了。 :)
猜你喜欢
  • 2018-12-31
  • 1970-01-01
  • 2014-12-26
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2013-09-09
  • 1970-01-01
相关资源
最近更新 更多