问题回顾:将 ASP.NET MVC 4 Web 应用程序从 32 位 Windows 2008 服务器场移动到 Windows 2008 R2 64 位服务器时,QZDASOINIT
IBM i 创造的就业机会从约 2,000 个跃升至约 200,000 个。代码库没有改变,唯一改变的是执行环境。
一些相关的事情需要了解QZDASOINIT
作业...默认情况下,这些作业是在子系统中创建的QUSRWRK
(尽管它们也可能出现在QSYSWRK
and QSERVER
if the QUSRWRK
当请求 ODBC 连接时子系统不活动)。QUSRWRK
配置为创建其中之一QZDASOINIT
子系统一启动就开始工作。如果发出 ODBC 请求但没有QZDASOINIT
职位空缺,还有2个QZDASOINIT
工作将开始。每个QZDASOINIT
作业在结束之前将处理 200 个 ODBC 请求。所有这些默认值以及更多内容都可以使用以下命令进行更改CHGPJE
or CHGSBSD
命令。
QZDASOINIT
工作有一个或两个“类别”。可以使用这些类来微调这些作业的执行。
您可以找到有关您当前活跃的信息QZDASOINIT
工作通过使用DSPACTPJ
命令。
资源:
CHGPJE – 更改预启动作业条目 http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fcl%2Fchgpje.htm
CHGSBSD – 更改子系统描述 http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fcl%2Fchgsbsd.htm
CRTCLS – 创建类 http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fcl%2Fcrtcls.htm
DSPACTPJ – 显示活动的预启动作业 http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fcl%2Fdspactpj.htm
ENHOSTSVR – 终端主机服务器 http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fcl%2Fendhostsvr.htm
ENDSBS – 末端子系统 http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fcl%2Fendsbs.htm
WRKCLS – 与类一起工作 http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fcl%2Fwrkcls.htm
QZDASOINIT 作业的性能注意事项 http://www.linkedin.com/groups/Performance-considerations-QZDASOINIT-jobs-59314.S.123804107
可能的“解决方案”#1:
在 Windows 端的连接字符串中,更改MaximumPoolSize=-1
to MaximumPoolSize=XXX
其中 XXX 是一些数字,它允许 ASP.NET 应用程序正常运行,但不会降低 IBM i 上的性能。我建议使用 2,000,因为当应用程序在 32 位服务器上运行时,这似乎是可以忍受的。
可能的“解决方案”#2:
让 IBM i 管理员对 IBM i 进行一些更改 - 因为您知道服务器场的 IP 地址范围,所以管理员可以设置一个新的子系统,该子系统除了为您的应用程序 ODBC 连接提供服务外什么也不做。
更改允许的最大数量QZDASOINIT
工作使用CHGPJE
命令 – 再次,我建议从 2,000 开始,并根据需要进行调整,以满足应用程序的性能和对 IBM i 的影响。如果有必要,管理员可以设置一个作业来杀死所有QZDASOINIT
新子系统中的作业 – 通过结束该子系统 (ENDSBS) 或ENDHOSTSVR SERVER(*DATABASE) ENDACTCNN(*DATABASE)
(我会终止该子系统,但您的管理员会知道什么最适合您的环境)。
其他一些建议本身不是解决方案,但可能会有所帮助:
限制 ASP.NET 应用程序中并发执行的线程数。显然这不是一件快速或容易的事情,而是要在应用程序的下一次迭代的注释中添加一些内容。
改变MaximumUseCount=100
匹配您使用的任何使用计数QZDASOINIT
jobs.
我在“解决方案”周围加上引号,因为虽然它们可能允许您将应用程序迁移到新环境,但它们实际上并不能解决问题。