今天,在解决我们网站的问题时,微软工程师发现我们已用完了可用的 ATQ 线程。我不确定 ATQ 线程是什么,也不知道它如何影响 IIS 处理响应。有人能指点我了解更多吗?
答案1
ATQ = 异步线程队列。从高层次上讲,它是 IIS 的主线程池。以下是来自这篇 Windows IT Pro 文章这是关于 IIS 线程的一次很好的演讲。
IIS、ASP 和线程 IIS 使用线程池(即代码执行实例)来处理传入请求并处理这些请求。此线程池称为异步线程队列 (ATQ)。IIS 使用线程池是因为重用现有线程比每次收到新请求时创建新线程更快。ATQ 最初处理所有传入请求。初始处理后,IIS 可能会将请求发送到另一个队列或将请求留在 ATQ 中。以下是请求类型及其运行队列的列表:
- .htm、.jpg、.gif 和其他静态请求始终在 ATQ 中运行。
- 通用网关接口 (CGI) 请求会创建一个新进程来处理该请求并在该进程中运行。但是,默认情况下,该请求仍会保留它所启动的 ATQ 线程来处理来自 CGI 进程的返回信息。
- Internet 服务器 API (ISAPI) 过滤器或扩展默认在 ATQ 中运行。但是,ISAPI 组件可以创建自己的线程池并使用该池执行。
- Active Server Pages (ASP) 请求从 ATQ 传递到 ASP 使用的线程池(IIS 5.0 中的 COM+ 线程池或 IIS 4.0 中的 MTX 池)。
- OOP 请求(即 OOP 应用程序)进入 ASP 使用的线程池。ASP 线程对 OOP 应用程序进行适当的进程间调用。
答案2
伟大的squillman 的回答。您可能正在查看一个网站,该网站具有长时间运行的请求(下载或其他静态请求),但尚未释放。
不是 ASP,它将请求线程与 ATQ 分离(DevX 文章),但可能是其他一些行为不当的 ISAPI 过滤器。
您在 Web 服务器还运行了什么程序?