生产环境事故排插方案--介绍篇

生产环境事故排插方案


ps:整理了部分生产环境错误的排插手段,未完待续,欢迎大家评论提出更好的事故排插的方法和方式~

遇到问题,不要慌,确定问题的影响范围,对症下药进行处理:


一、页面错误

1. 无法加载

1) 根据页面提示的错误信息,若404,检查WEB-INF 下是否有文件,是否 是最新代码。

2) 若是50x,

a. 检查ngnix域名解析和分发是否出现问题,error.log,/var/log/nginx。
b. 检查DNS解析问题或阿里云中转解析问题,ping 域名->ping ip- > ping 其他域名。
c. 检查ngnix的日志,tail -f log日志,看日志打印的内容。

3) 查看磁盘问题,是否是磁盘空间满了。df -h

4) 查看本机的网络问题,是否出现网络故障。nmon监控

2. 页面乱码

1)查看tomcat的server.xml,是否有utf-8的编码设置。
2)查看当前用户的编码设置 echo $LANG,是否正确。
3)进tomcat根目录下的webapps/ROOT/WEB_INF/class/application.properties 中查看 jdbc的设置,是否是正常。


二、接口服务错误

  1. 确认 错误的原因是 服务器的原因,而非 单个用户 个人网络情况导致的 个别原因,防止空忙活一场。
  2. 查看服务器 应用进程是否还在。 ps -ef | gep xxxxx
  3. 查看 tomcat 的 日志,是否有接口请求进来 ->(外网rest服务) nginx 日志是否有请求 -> 域名代理是否正常。
  4. 通过日志 判断是否是 数据原因导致的,若是,则 复现条件,线上查看日志情况。
  5. 判断其他接口是否正常,确定错误范围,若该接口内部封装 其他应用接口,模拟调用,调用不通,联系外部应用负责人配合排插错误。
  6. (dubbo)检查自身应用的配置,是否强制指定了外网的ip或者 指定的ip 非 此服务器ip,导致无法连接其他应用。
  7. 使用 w查看服务器当前登录用户,是否存在可疑用户,服务器被攻破。
  8. Jstat 查看进程gc情况,若 young gc很频繁,则去看top 进程占用情况以及自身分配的 jvm,看是否有必要调大jvm 堆。jstat -gcutil
  9. 查看 服务器的load,看看CPU和内存的情况。top
    若存在高CPU或内存情况:
    a. 先查看进程id。ps aux |grep java
    b. 查看此进程(2633)中各个线程占用的CPU状态,选出占时最多最繁忙的线程id。ps -mp 2633 -o THREAD,tid,time | sort -rn
    c. 需要的线程ID(3626)转换为16进制格式。printf “%x\n” 3626
    d. 打印进程中线程的堆栈信息。jstack 2633 |grep e18 -A 30
    e. 查看具体代码。很有用

三、数据加载缓慢或者加载不出来

  1. 查看 日志,看日志情况分析
  2. 检查 具体的 sql 语句,判断是否是sql 语句导致的。show processlist;优化语句
  3. 查看数据库的磁盘空间
  4. 查看日志,是否出现死锁或长时间锁定。推荐 大家可以看下 redis的分布式锁机制,思路就是最基本的全包

    1)竞相调用的数据是否加锁
    2)锁住后,是否有超时解锁机制


四、出现了OOM

  1. 系统宕机了,赶紧重启,别影响线上业务
  2. dump 文件分析,用 eclipse mat 分析dump文件
    1)catalina.sh 中配置 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}。
    2)jmap -dump:live,format=b,file=/XXX/XXX/jmap.dump

  3. 查看tomcat 的catalina.sh 中的jvm配置,是否 优化过符合当前业务场景,千万别是tomcat的原生默认配置
    1) 查看应用的 jvm 使用情况,跟tomcat的配置对比。
    a. jmap -heap pid——要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起
    b. jmap -histo [pid] —-查看JVM堆中对象详细占用情况

  4. 重启应用后,若很快又OOM,将服务 改成单机,打印日志,和看 进程gc 调用情况,确定问题。

  5. unable to create new native thread.
    1) 查看机器配置。ulimit -a
    2) jps打印线程堆栈信息.进行线程数据查看,确认是否线程数过多

你可能感兴趣的:(事故排插)