我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复348或者20190802可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
通过SDK的方式连接CRM的组织服务,我这里使用的测试代码来自我前面的博文 一种提升连接Dynamics 365性能的方法 。从这些数据库中可以看出,第一次连接慢点外(接近5秒),其余几次都很快,不到1秒。
然后我再运行程序,在运行中回收下CRM对应的应用程序池 CRMAppPool,可以观察到数据如下:
可以看到应用程序池重启后的线程7,完成消耗了14秒,它之前的线程6消耗时间则为1秒,它之后的线程8消耗时间 9秒,线程9小时时间4秒,线程10开始恢复到正常消耗时间1秒。
根据 How to Find App Pool Recycles in Event Log 和 Recycling Settings for an Application Pool <recycling> 的说法,IIS 10 (对应的Windows Server版本是2016吧)则是记录了几乎所有的应用程序池的回收事件,若是较早版本的IIS,记录的回收事件比较少,只有Time, Memory, and PrivateMemory 三个。也可以开启。选择要开启的应用程序池,点击 高级设置 进行设置,如下图所示:
如果要查看IIS应用程序池回收,IIS重启等日志,打开 事件查看器 (可以直接使用命令 eventvwr 打开),导航到 Custom Views > Server Roles > Web Server (IIS) 即可查看到,据我观察,Source 为 WAS的记录的便是应用程序池回收事件。
当然也可以使用PowerShell命令来查看,比如如下的命令(注意这是英文版的搜索关键词,若是中文版请将 recycle 换成 回收)
Get-WinEvent -LogName System | Where-Object {$_.Message -like "*recycle*"}
如果是查看CRMAppPoole的回收,可以稍微改动下:
Get-WinEvent -LogName System | Where-Object {$_.Message -like "*recycle*CRMAppPool*"}
执行效果如下:
当然可以指定应用程序池的回收事件,选择应用程序池以后点击右边的 正在回收 进行设置,比如我这里设置为 凌晨2点回收,点击下一步保持不变后设置好。
那能提升下首次访问的性能,horse87 的文章 提高 SharePoint 页面访问速度之应用池预加载 将应用程序池高级设置中的 Start Mode 改成 AlwaysRunning .
还有将 IIS 站点高级设置中的 PreLoad Enabled 设置为 True。我测试了一下,对于首次SDK连接的效率提升并不是很明显,提升一两秒左右。
这里顺便提一下对IIS设置的一些建议,根据horse87 的文章 提高 SharePoint 页面访问速度之增加W3WP进程数及重置回收 ,如果IIS所在服务器内存和CPU使用不高的话,可以将CRM应用程序池的
Maxinum Worker Processes 设置为大于1的值,比如2,具体看影响。