iis默认程序池不回收

iis默认程序池不回收,第1张

IIS一般默认 应用程序池有设置固定时间间隔(分钟) 默认1740,以及闲置超时(分钟) 默认20;如果我们 asp.net core+quartz.net 部署在IIS上执行长期定时任务时,需要将上来两项内容设置成0,(不回收);不然我们的定时任务会在IIS做回收时清理掉我们的定时任务。导致任务停止;如果可以做定期检测也是一种方式,本人比较偷懒,罩纤就不做回收。但是否会造成其他问题,需要观察iis程序池默认回收时间为1740分钟(29小时),若要自定义为不回收, *** 作如下,这样IIS除非手动回收,否则不会自动回收

1 在IIS中找到这个站点所用的程序池,点击“高级设置…”

2 回收——固定时间间隔(分钟) 改为 0

3 回收——虚拟/专用内存限制(KB) 改为 0

4 进程模型——闲稿李置超时(分钟) 改物敬仿为 0 那一定是IIS的应用程序池回收的机制在作怪了。因为IIS的默认设置里面,如果一个站点所处的应用程序池超过一段时间没有被访问或者请求,IIS就会自动回收这个程序池,并且把进程杀掉。那进程里面的线程肯定也活不下来了。

但是我们可以通过设置应用程序池参数使其不会被简单的自动回收(有些情况无法避免,比如热部署的站点,错误数量超限等等)

一、关于前台线程和后台线程

1、简介

CLR中线程分为两种类型,一种是前台线程、另一种是后台线程.

前台线程:应用程序的主线程、Thread构造的线程都默认为前台线程

后台线程:线程池线程都为后台线程

2、区别

2.1 前台线程:前台线程一般执行重要性很高的任务,至于什么是重要性很高,这个需要结合业务综合考虑,哪些 *** 作是当前应用程序必须执行的。

如下控制台程序:

控制台等待DoWork方法执碰誉慎行完成之后关闭。

2.2 后台线程:这里需要注意,当一个进程的所有前台线程关闭时,也就是当应用程序推出的时候,无论后台线程有没有执行完它的任务,它都会被强制关闭.但是,当应用程序开启时,它又会重新启动.后台线程一般执行不重要、耗时很短的任务,就算进程(应用程序)关闭了,导致它强制关闭,也不会造成影响的任务.比如系统清理程序等。

如下控制台程序:

控制台不等子线程处理完成,直接关闭。

注意:一般进程会在所有的前台线程执行完毕时关闭。

二、使用Thread构建异步 *** 作(受限制)

1、Thread简介和笑敬使用场景

关于使用Thread类构建线程执行异步 *** 作有以下几点需要注意的:

(1)、Thread本身微软并不建议使用,应为它其中的很多Api并不靠谱(如Start、Join、IsBackground等)

(2)、由于(1)的问题,所以微软将整个Thread类都不开放给Windows Store应用

虽然Thread有很多不好的缺点,但是它还是有它的用武之处,只要满足以下条件:

(1)、如果执行的代码处于一种特定的状态,这种状态对于线程池来说时非同寻常的。

(2)、线程需要以非普通优先级运行.所有线程池线程都以普通优先级运行,虽然可以修改,但是在不同线程池之间,这种优先级无法持续。

(3)、需要线程变现为一个前台线程(什么是前台线程,上面有解释),防止应用程序在线程结束前就关闭了.这个后台线程无法做到(也就是线程池线程)

(4)、线程需要执行长时间的计算任务。

(5)、线程可能存在终止的情况,程序池线程不存在这种情况(它会一直执行).Thread类的Abort方法。

三、CLR线程池

1、进程和CLR的关系

一个进程可以只包含一个CLR,也可以包含多个CLR

2、CLR和AppDomain的关系

一个CLR可以包含多个AppDomain

3、CLR和线程池的关系

一个CLR只包含一个线程池

所以得出一个CLR下的多个AppDomain共享一个线程池和一个进程下的多个CLR拥有多个线程池的结论.注:多个线程池间的线程池相互不产生影响。

4、CLR和线程池和 *** 作请求队列的关系虚则

(1)、CLR第一次初始化时,线程池并没有线程,当应用程序调用异步代码执行一个方法时,会将该请求记录项加入到 *** 作请求队列中,线程池的代码从这个队列中获取记录项,并派发给线程池线程,接着

线程池会创建线程,当然这里会有性能开销,但是当该线程执行完毕之后,线程池会回收这个线程,这里注意:线程池不会直接销毁这个线程,而是让它处于闲置状态.这样就不会产生额外的性能开销。

但是如果该线程如果长时间处于闲置状态,那么线程池会销毁它,关于这个时间的计算很复杂,各个CLR对它的定义各不相同。

(2)、当应用程序向线程池发起了多个请求,线程池会尝试用一个线程来处理你所有的请求,但是如果这个线程处理压力过大,那么它会开启一个新的线程来给它分担压力.以此类推。

(3)、线程池之包含了少量线程,因为如果线程太多,会增加性能开销,当然如果你升级了你电脑的cpu,线程池则会创建更多的线程.这个过程线程池会自动的去读取你得cpu核数信息,自动的去分配合适的线程数

合理地分配CPU资源.当应用程序的压力减轻,那么它会销毁不用的线程。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12375431.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存