我有一个 WCF 服务,它的内存可能会增长。我对专用字节设置了内存限制,以便在内存使用量达到 500m 后回收应用程序池。我注意到,当我的 w3wp.exe 进程决定回收时,它的大小可以达到 600m,并且任何当前正在执行的客户端请求都会出现通信错误。是否有办法让 iis 等待请求完成然后再回收进程?
答案1
回收是指当某个进程达到特定条件时,终止该进程,并用另一个进程取而代之。
在可怕的类比中,这有点像通过将大头针放置在一英尺的球体上来确保气球的尺寸只能是一平方英尺 - 当气球达到极限时,它就会破裂,然后你就换一个新的。
从被要求回收的时间点开始,被回收的进程将按照 {Shutdown Time Limit} 的时限自行关闭。
如果他们不能在这段时间内(默认 90 秒)完成工作,那就完了。
如果您使用的是具有持久连接的 WCF 主机,那么我认为答案是否定的;但答案也是“选择更大的限制”。您所描述的策略是:“我希望我的应用程序在达到 500MB 时停止运行。”但应用程序本身并不知道这个限制;它只是试图根据需要增长。
无限制地对您的应用进行负载测试;查看它会得到什么以及什么可能表明存在泄漏;在表明存在泄漏时设置限制。