近日,帮一个客户解决了服务器CPU占用率高达100%的问题。
以前做的一个某污水处理厂自控系统项目,客户反映其自控服务器有故障,由于自控服务存放iFIX服务器端、现场多套PLC实时数据、过程数据、报表数据等重要软件和数据。我 赶往现场去处理。
1、故障现象
(1) 自控服务器风扇一直发出“嗡嗡嗡”较大响声;
(2) 通过任务管理器发现:CPU占用率为100%,其中sqlserver.exe进程占用CPU高达98%上。
2、原因排查
由于iFIX客户端上的报表软件是访问存储在自控服务器SQL Server里面的报表数据,所以怀疑是 SQL Server出现了状况。
(1) 进入SQL Server Management Studio, 打开SQL Server Profiler,
新建跟踪
a.点击新建跟踪,并设置好数据库连接
b.设置跟踪属性,选择模板“Standard”
c.切到“事件选择”进行跟踪设置
1) 只保留如下两个事件选项
2) 点击列筛选
3) 进行详细筛选设置
设置CPU时间作为筛选条件,单位毫秒(用于跟踪耗CPU占用较长的查询,可设置为大于等于20000,按CPU内核数×1000,可以跟踪CPU占用100%大于1秒的查询)
(2) 点击运行,跟踪语句,定位CPU占用较多的语句
如下图所示,有两条SQL语句使CPU占用至少在25358毫秒以上,服务器为戴尔PowerEdge R710,CPU为4 核,则至少CPU占用100%耗时25358/4/1000 = 6.34秒才可以执行好相应的操作
以上 CPU占用较多的两条语句为:
3、处理方法
这两条SQL 语句来自第三方水质在线监测软件。
暂时处理方法:拔掉 水质在线监测软件电脑连接到自控服务器的网线,自控服务器风扇恢复正常,不再发出 “嗡嗡嗡”响声,CPU占用率降到2%,一切恢复正常。
后续处理方法:需要 第三方水质在线监测软件人员修复其 两条SQL 语句。