我继承了一个非常古老的经典ASP脚本,该脚本用于一次向大约5000到10000个收件人发送电子邮件,数百个一批地发送。它位于一个具有高流量网站的专用服务器上。
邮件脚本的server.scripttimeout属性设置为10分钟,整个邮件列表在内存中加载到scripting.dictionary中,用于执行电子邮件验证和重复删除。
这个脚本可能被10到20个人同时使用,每个人最多发送10个邮件。
我觉得这对服务器来说不可能有好处,因为它有可能同时发生这么多长时间运行的进程,但我不能引用技术原因。这会导致线程被阻塞或内存消耗的问题吗?这可能会破坏网站的服务吗?
有人能说明为什么这不是一个好主意吗?我觉得这个脚本应该用邮件服务器代替,但是,我需要首先引用技术原因。
感谢您的任何意见。
最佳,Jack
编辑
具体来说,我认为每次运行这个脚本时,ASP线程池中的一个线程都会忙于处理邮件。
根据http://www.iis.net/ConfigReference/system.webServer/asp/limits,processorThreadMax属性:
"processorThreadMax属性指定IIS可能创建的每个处理器的工作线程。
注意:此设置会极大地影响Web应用程序和服务器的总体性能。因为此属性定义了可以同时执行,此设置应保持为默认值值,除非您的ASP应用程序正在对进行扩展调用外部组件。"
假设是一个单处理器服务器,默认配置该值(25个线程),如果20个并发用户同时执行邮件拍摄,那么只有5个线程可以为网站提供服务,我说得对吗?
如果我是正确的,那么我认为仅凭这个原因就足以表明这种方法是不可持续的,应该用更持久的方法来取代。
有人能确认我是否正确吗?
需要考虑的几个原因:
如果在网站维护期间重新启动IIS服务/应用程序池,该怎么办?
如果你的邮件会消耗大量的资源怎么办?
如果其他页面会消耗大量资源(使您的邮件无法正常工作),该怎么办?
PS:你现在是如何运行你的脚本的?如果您是通过访问浏览器中的特定页面来完成此操作的,您还应该考虑维护原因:浏览器可能会在超时时取消请求,而且,尽管您可以解决出现的各种问题(IIS取消脚本执行、日志记录不方便),但这仍然会增加一堆缺点。