线上问题排查

Posted on By xqw

  • content

  • jvm cpu过高如何排查 top -p {pid} (top -b -n 1 批处理,显示一次,不阻塞)
    top -H -p {pid} 查看线程cpu使用情况(ps -mp {pid} -o THREAD,tid,time)
    拿到线程tid,转16进制,printf “0x%x\n” {tid} jstack {pid} |grep {tid} -A 10 查看哪一行代码

  • jvm内存溢出 1、 参数:-XX:+HeapDumpOnOutOfMemoryError
    2、 jmap -dump:format=b,file=dumpFileName {pid} 3、 jvisualvm或者MemoryAnalyzer分析工具

  • jvm参数优化、举个例子 内存相关:堆大小、新生代、元空间、线程占用内存
    gc相关:回收线程多少(cpu核数)、gc回收器选择及对应配置(java8默认吞吐量优先,ParNew+CMS+N此压缩或者G1)
    辅助信息:内存溢出dump一下、打印gc
    日志系统,fullGC比较多(5分钟一次),youngGC(5分钟200次),(目标younggc、fullGC少、耗时少),调整年轻代堆大小、元数据区大小、GC收集器、并发预清理

  • redis cpu高 看慢日志(指令开始到结束,不包括指令排队,包括网络消耗)
    监控指令,查看高消耗指令

  • redis 防止cpu高
    redis proxy 防止高危命令执行 keys、hgetall、flushall
    aof导致的cpu上升
    可能没用连接池,都是短链接,redis要消耗资源在短链接上
    业务侧二级本地缓存