常见问题
查看日志
如果探针工作不正常或者没有数据,通常可以从日志里获取更多的信息来定位问题。
UniAgent默认日志位置:C:\Program Files\tingyun\monitor\logs\agent\dotnet.log
普通安装方式默认日志位置:C:\Program Files (x86)\Networkbench.COM\DotNET Profiler\log\agent.log
正常情况下agent.log 日志中不应该存在Error、Critical等关键字。
默认情况,日志级别为Info, 审计模式是关闭的,这种情况得到的信息量比较小。通过修改日志级别为debug,开启审计模式,输出更多日志信息来定位问题。
排除安装故障
检查GAC中的TingYun.dll
注意:安装探针时需要在 .NET 全局应用缓存(GAC)中部署一个程序集,这要求使用管理员权限进行安装。
安装时,某些系统安全类的软件可能会直接禁止了安装程序对GAC的操作,请确认安全类的软件行为。
如果使用受限权限用户安装,或被杀软拦截,可能会导致虽然安装程序提示安装成功,但是启用监控后,使用浏览器访问网站时,由于找不到探针组件导致页面提示失败。
失败页面通常如下所示:
由于安装权限导致的网站运行失败是完全可以在安装之后立即重启网站并访问来进行验证的。当此情况发生时,请立即卸载探针,并使用管理员权限用户重新安装探针或更改安全类软件的拦截规则,允许对GAC进行操作后重新安装探针。
如果无法更改安全类软件的拦截规则或暂停安全类软件,请尝试使用管理员权限新建以下目录,并将探针目录net45下的TingYun.dll手工拷贝到此目录。
%windir%\Microsoft.NET\assembly\GAC_MSIL\TingYun\v4.0_3.0.0.0__539a9bbefd34e379
检查DCOM组件tingyun_profiler.dll
注意:安装探针时需要注册DCOM组件tingyun_profiler.dll,此操作会在注册表计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8BEB2128-D285-4E1D-91B6-11ACD43EC0EE}
写入键值。
如果安全类的软件禁止了对注册表的操作,启用监控后,会导致没有监控数据及监控日志的产生。在Window事件内会有代码为0x80040152 的错误信息:
当此情况发生时,请暂停安全类的软件并重新安装,确认有监控日志产生后再启用安全类的软件。
检查IIS服务环境变量
注意:启用探针时,需要在系统环境变量和IIS服务的注册表内写入键值。
某些安全软件或Windows安全更新可能会定期清理环境变量和注册表导致探针失效。当发现探针不工作时,可以检查下述注册表和环境变量:
注册表:下列各项内均应该存在名称为
Environment
的键值。计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS
系统环境变量:系统环境变量列表内应该存在名称为
COR_PROFILER
的环境变量。
注意:探针启用后,Windows日志应该存在以下日志。
请确认CLSID 是否为 {8BEB2128-D285-4E1D-91B6-11ACD43EC0EE}
,如果不等于此值,可能此机器上安装了其他监测产品。
安装成功但无数据
- 初次安装后需要一段时间才能看到数据,通常需要5分钟或更长时间,请多等一段时间。
- 有的用户浏览器缓存有问题,即使有数据如果不强制刷新也可能看不到,请尝试清空缓存或强制刷新或更换浏览器。
- 探针安装成功后,必须启用监控,否则探针不生效。
- 请确认授权码是否正确。
- 请确认Web服务器有没有用户访问 探针数据是基于HTTP请求的性能,如果没有访问,就不会有性能数据。如果没有用户访问,请使用浏览器访问相应的应用,再过5分钟后查看报表。
监控异步方法
探针对异步方法调用做了有限支持,当应用调用了异步方法,且没有明确使用ConfigureAwait(false)对线程上下文进行清理时,可以监控到数据库和HttpClient的异步方法。
关于ConfigureAwait(false)的技术描述,请参考此文档。
加载此程序集将产生与其他实例不同的授予集。(异常来自HRESULT:0x80131401)
LegacyCasModel模式
一些网站配置了LegacyCasModel=true
或NetFx40_LegacySecurityPolicy
以使用.NET 2.0内比较陈旧的安全模型。例如出于向前兼容性的需要,SharePoint和BlogEngine.NET等网站配置了LegacyCasModel。安装探针后,Sharepoint页面会报 加载此程序集将产生与其他实例不同的授予集。(异常来自HRESULT:0x80131401)
字样的错误事件。BlogEngine网站不会报错,但会导致探针日志产生以下错误,从而无法上报监测数据。
ERROR System.Net.HttpWebRequest::SerializeHeaders, in rejit
ERROR System.Net.ConnectStream::CallDone, in rejit
如果网站调用了HttpClient 或 HttpWebRequest,会出现失败从而影响业务执行。
当.NET 4.0内核运行在2.0模式陈旧的安全模式下并且尝试加载部分监控工具改写的代码时,CLR会抛出上述错误信息。
任何一款.NET监控工具,例如Dynatrace、NewRelic、包括微软的SCOM(Microsoft System Center Operations Manager)等均会出现上述现象。
将LegacyCasModel更改为false,可能会导致引发“SecurityException”异常,如果更改LegacyCasModel为false且所有功能都已经测试没有出现SecurityException,那么可以安全的使用探针。如果无法更改LegacyCasModel则不能使用探针。
单个进程加载多个应用程序域
一些应用使用反射的方式动态加载程序集,如果动态程序集使用了多个应用程序域,并且多个应用程序域均直接或间接调用了探针嵌码的方法时,会导致报错“加载此程序集将产生与其他实例不同的授予集。(异常来自HRESULT:0x80131401)”
设置系统全局环境变量 COMPlus_LoaderOptimization=1
,并重启监控查看此问题是否已解决
安装探针后出现偶尔访问比较慢的情况
通常.NET应用在进程重启阶段,由于需要嵌入探针并修改部分嵌码,导致响应明显比没有安装探针时慢。如果感觉到了网站反应慢,通常是由于IIS配置了进程回收机制,导致进程在工作期间回收重启,进而导致响应慢。
IIS的进程回收机制,通常有以下几种:
- 固定回收时间间隔:IIS默认的进程回收时间间隔是1740分钟,即29个小时。
- 按最大请求数回收:当一个进程处理到指定的进程数之后进行回收,默认为0,为不限制处理的请求数。
- 指定时间点回收:可以指定在固定的时刻进行回收,默认是没有的。
- 如果网站比较空闲,默认20分钟以内没有访问,进程也会被回收。
打开IIS管理器>应用程序池, 选中想查看的进程池,点击高级设置>回收查看进程回收策略。
查看高级设置>进程模型里面的“闲置超时(分钟)”。
然后可以查看操作系统的事件日志,筛选“级别”等于 “信息”且“来源”等于 ".NET Runtime"的日志来确定应用都在哪个时间点重启了,是否和出现访问慢的时间点相符。
建议:
更改进程回收策略,设置为按照时间点进行回收,将进程重启时间点设置为业务低峰时期,例如晚上 2:00-4:00之间。
更改网站应用程序池的高级设置>进程模型里面的“闲置超时(分钟)”为200。