什么可能导致从 Windows 服务执行的进程运行比从命令行(管理员)运行慢?
Posted
技术标签:
【中文标题】什么可能导致从 Windows 服务执行的进程运行比从命令行(管理员)运行慢?【英文标题】:What might cause an executing process from windows service to run slower than running from command line(admin)? 【发布时间】:2009-11-03 21:02:38 【问题描述】:什么可能导致从 Windows 服务执行的进程运行比从命令行运行慢? 当我从具有管理员权限的命令行执行一个进程(另一个 exe)时,它比 Windows 服务执行相同进程时快四倍。这可能是什么原因造成的。 该帐户的目录和文件权限是可以的。它运行成功,只是慢了 4 倍。需要关于调查什么以找出问题的想法。
我们一直在使用 sysinternals processexplorer,但什么也没看到。
可以修改“优先级”以查看是否导致问题的高级选项卡在哪里?
【问题讨论】:
你有没有想过这个问题?我看到了同样的行为 【参考方案1】:在 Windows 中,后台服务的优先级可能较低,可以在计算机属性的高级选项卡中进行配置。
【讨论】:
在计算机管理对话框中:服务和应用程序:服务 我右键单击一个服务并选择属性,这个 UI 上没有高级选项卡,我在哪里可以找到高级选项卡? 系统属性 -> 高级 -> 性能 -> 设置 -> 高级调整以获得更好的性能 -> 选择“后台服务”,这是服务器的默认设置,但不适用于工作站。 这完全没有任何区别。我使用 Process Hacker 将 IO、Page 和 Process 优先级提升到高,但它的运行速度仍然慢了 3 到 4 倍。这真的很奇怪。它不影响 Vista 核心和更早版本(Windows 2008 web server 可以,但 Windows 2008 server r2 不行)。谷歌搜索几乎没有关于这个问题的任何内容。它似乎对 CPU/内存密集型运行的影响比 IO 密集型运行更糟。【参考方案2】:假设两个应用程序的优先级相同,您需要profile the app 并查看哪些调用占用的时间最多。这至少应该为您提供足够详细的信息,让您回过头来询问“为什么这个特定的调用运行缓慢”而不是“为什么我的应用运行缓慢”。
【讨论】:
【参考方案3】:从 www.sysinternals.com 下载 sysinternals 进程监控工具,然后开始跟踪应用程序,这将显示进程在注册表/文件访问方面正在做什么,并且可能会显示延迟时要查看的内容正在发生。
如果您有调试符号,它还可以为您提供正在调用的 dll / 应用程序中的函数调用名称,但即使知道发生延迟时会发生什么以及正在使用哪些 dll,用户模式或内核也会给出您很好地指示了从哪里开始。
【讨论】:
以上是关于什么可能导致从 Windows 服务执行的进程运行比从命令行(管理员)运行慢?的主要内容,如果未能解决你的问题,请参考以下文章
什么可能导致长时间运行的进程中突然出现 ClassNotFoundException?
服务器大量php-cgi.exe进程,导致CPU占用100%的解决