1#
   当S4系统出现了类似崩溃的情况时,客服或实施人员按照常规排查办法,无法自主解决时,需要由开发人员进行协助处理。
本手册,可让客服或实施人员,用正确的方法获取相关的错误信息,以便开发人员分析系统崩溃的原因。
一、 如何获取S4错误日志?
   处理方法:S4的错误日志存放在Tomcat的Logs目录下,一般产品的安装默认路径是
C:\Program Files\Common Files\Metasoft\Tomcat7\logs  或
C:\Program Files(x86)\Common Files\Metasoft\Tomcat7\logs
需要的文件,只有 stderr.log、stdout.log,错误日志是实时产生,所以要获取最准确的信息,就需要清空日志后,再模拟一次操作,让错误日志重新生成,但是一般错误日志文件,是被Tomcat直接占用的,所以无法直接删除,需要以下操作。
  1.使用记事本(或ultraedit文本编辑器)打开日志文件。
  2.删除里面所有内容,让其变成空白文档。
  3.保存!注意,保存时它会提示【不能创建文件,确认路XXXXX】
  4.点击确定,弹出【另存为】窗口,直接点保存。
这样,就用一个空文档替换了日志文件,等于是清空了日志,在日志清空后,关闭文件。
再去系统中模拟错误操作,操作2到3次为佳,确保错误日志的生成,当开发人员要求【错误日志】的时候,这个才是正确的获取方式。
注意:
(1)系统参数请开启调试模式(参数编号:SY100),并且在调试完毕后立即关掉。
(2)Stderr.log 、Stdot.log 文件太大,双击打不开,怎么办?
   处理方法:
(1)ultraedit文本编辑器很强大,可以打开任何大文本,建议安装。
(2)日志文件过大这个事情,本身就很不正常,如果超过100M,就说明这个日志是时候该清空一次了。日志过大,同样会导致S4响应缓慢。
(3)如果日志太大打不开日志文件,也可以把Tomcat服务停止,删除日志文件,并且服务器重启,模拟出问题后,日志文件会重新生成。
  强烈建议:
创建windows自动任务,定期(每天或每周的清晨5点,等日结过后)重启S4 tomcat服务。
二、系统报错【读取资料错误】怎么办?
   处理方法:读取资料错误,基本上可以直接定义为Bug。这个错误的出现原因有很多,需要开发人员去看错误日志,分析错误原因。
注意以下2个可能的原因,实施人员可以自行解决:
(1) 数据库硬盘空间不足
(2) 数据库日志过大
如何清理数据库日志,请看这里:http://metasoft.cn/faqx/showtopic-3229.aspx
三、系统响应缓慢,操作等待时间很长。
   处理方法:可参考元动论坛上的方案:http://metasoft.cn/faqx/showtopic-3420.aspx
这种事情分很多中情况,以下常见情况
  1.硬件内存不够,一般出现在小客户身上。集团客户一般都是很强的硬件配置,但是也要去看看应用服务器和数据库服务器的内存使用情况。看内存使用情况,和磁盘使用情况,如果发现异常,看情况处理。
  2.Tomcat内存设置不够大,不过自从产品有了64位之后,出现已经很少了,不在这里详细描述,请在Stderr.log 中搜索 OutOfMemoryError 这个词,如果存在这个词,就需要调大Tomcat内存。
  3.数据库并发太高,导致请求阻塞,这个情况最常见,一般集中出现在月末前后,集团财务频繁的操作大型报表,对数据库的大部分资源长期占用,而导致请求缓慢,临时建议:不要在业务发生的高峰期进行此类操作。彻底解决还需要针对具体情况进行硬件和报表的优化方案。
  4. 数据量过大,像进销存,维修业务,客户关系这种大数据,本身因为表体里面的数据量过大(比如有超过5年的老数据),操作本来就很缓慢,这种瓶颈问题需要对删减老数据,优化索引。如果是个别作业,业务,报表缓慢,可针对性的进行优化,提升响应速度。
四、单据作业打开白屏怎么办?
  处理方法:
(1)如果同一种单据,个别单据打不开,大多是数据上有错误,尝试删除,重新做单!
(2)如果是某种业务单据全部打不开,就是Bug,带上你的错误日志,去找开发人员解决。
(3)如果本来可以打开,后来不知道发生了什么之后,又打不开了,请尝试删除tomcat缓存并重新启动Tomcat服务器。
五、 大批用户无法登录,大批用户掉线,大批用户执行某功能无限期等待!
  处理方法:
这种情况,我们一般定义为“系统崩溃了!”,系统崩溃,一般会有几种原因。
  1.Tomcat内存溢出
验证方式:请在Stderr.log 中搜索 OutOfMemoryError 这个词,如果存在这个词,有就是!
解决方案:
  (1) 调整Tomcat内存配置
  (2) 物理内存不够,就增加物理内存。
  (3) 集团需增加S4应用服务个数
  (4) 如果是每隔一段时间就发生这样的问题,建议创建windows自动任务,定期(每天或每周的清晨5点,等日结过后)重启S4 tomcat服务。
  2.数据库发生死锁
验证方式:
  1)请在Stderr.log 中搜索 牺牲品 这个词,如果存在这个词,有就是!
  2)复制以下SQL,去查询分析器的框里面执行,注意看结果,是否有死锁。
use master
go
declare @spid int,@bl int
DECLARE s_cur CURSORFOR
select  0 ,blocked
from (select * from sysprocesses whereblocked>0 ) a
wherenotexists(select * from (select * from sysprocesses whereblocked>0 ) b
where a.blocked=spid)
unionselect spid,blockedfrom sysprocesses whereblocked>0
OPEN s_cur
FETCHNEXTFROM s_cur INTO @spid,@bl
WHILE @@FETCH_STATUS = 0
begin
if @spid =0
select'引起数据库死锁的是: '+ CAST(@bl ASVARCHAR(10)) + '进程号,其执行的SQL语法如下'
else
select'进程号SPID:'+ CAST(@spid ASVARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl ASVARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
DBCC INPUTBUFFER (@bl )
FETCHNEXTFROM s_cur INTO @spid,@bl
end
CLOSE s_cur
DEALLOCATE s_cur
Go
注意:阻塞 = 慢,死锁 = 锁住了。
  处理方式:
如果有死锁,查询结果中会有 引起数据库死锁的是XXXXXX查这样的提示,注意看引起死锁的SPID
查可以使用 “Kill XXXX”(XXXX为SPID)语句去杀掉死锁。在Kill之前,把发生死锁的语句,记录下来,发送给开发人员,以便确认是什么功能触发的。