2013-04-10 27 views
1

我有一个应用程序,客户端通过websockets连接到IIS。 IIS然后为IPC连接到可执行文件创建一个本地代理。IIS不能扩展,但cpu也不能最大化,为什么它减慢

所以IIS是一个中间人。

随着越来越多的连接进来,整个架构得到越慢。

因此,某处存在瓶颈。

有意思的是CPU没有通过25%的使用。我没有对CPU使用情况进行任何限制。

该问题不是代码作为一个函数,现在需要100毫秒,现在需要1000毫秒。而这些功能不受网络限制。 简单的图像转换。 我也检查,看看我是否锁在锁或任何东西。

用户加入系统越多,出现这些图像转换的次数越多,使用的CPU就越多。 但是CPU利用率再一次没有变化,它停留在25%左右

即使最简单的函数执行速度变慢了,我猜测应用程序池中可以使用多少CPU的限制。我再次检查了AppPool设置,没有限制。

有关如何去解决这个问题的任何建议?

+1

让我想想,四核CPU这么25%是100%的一个核心 – Fredou 2013-04-10 23:52:55

+0

@Fredou,可能是,但如果工作线程不是跨核心分布的话,那将会很奇怪。 – 2013-04-10 23:55:08

+0

你是否已经把nic mon,磁盘和内存丢弃了?这些是在遇到像这样的IIS性能问题时要检查的其他关键组件。 – 2013-04-11 00:02:07

回答

4

听起来像是通过代码或系统设置的CPU关联设置。

您可以为每个应用程序池设置处理器关联(因此限制为1个处理器),这将有效限制在该池中运行的应用程序使用一个处理器。这将限制w3wp进程只使用一个处理器,因此如果你有一个四核CPU,它将运行在25%。在这里你可以找到通过你的IIS设置在这里改变这里的细节:this:http://www.iis.net/configreference/system.applicationhost/applicationpools/add/cpu

你也可以检查任务管理器,右键单击该进程,然后单击“设置Afinity ..”,看看你是否限制IIS到一个核心。

希望这可以帮助你!

+0

在任务管理器上右键单击w3wp.exe并查看关联性时,我看到所有11个CPU都被选中。 所以11 cpu在dec和0X7FF十六进制中是2047。所以我将AppPool亲和力Enabled设置为true,将Affinity mask设置为2047.这意味着使用所有CPU。尽管如此,我还是没有得到20%到30%的通过率,但应用程序越来越慢。我也删除了所有其他应用程序池以确保。我在默认应用程序池上运行它。 – 2013-04-11 19:01:42

2

您可以检查应用程序池进程的进程关联性。这可能是你被困在25%的原因。如果您的请求长时间运行,您可能会针对IIS允许的每个CPU的并发请求数(特别是在集成模式... 12中)的默认限制运行。四核CPU上的25%表明亲和力是你的问题,但如果不是,你也可以检查。这里是一个related answer