zoukankan      html  css  js  c++  java
  • 记一次后台性能调试过程

    场景:

    参与开发维护的etl web控制台出现监控消息读取非常慢的情况,检查队列正常,检查日志,某些情况下3s才输出一条消息详情日志(测试环境为调试方便将消息详情作INFO级别输出);

    处理过程:

    1.检查系统状态: jstat -gcutil [pid] 1000  (配图非实际场景)

    当时的YGC比较频繁,但是平均每次GC时间0.3s,按领导的说法是没有影响.暂且不表;

    2.检查内存状态: jmap -heap [pid] (配图非实际场景)

    服务器MaxHeapSize 32G,Eden Space 用了1.4G, from space + to space 共用了 1G; 领导只是吐槽一下,浪费;

    3.检查线程状态: jstack [pid] > jstack.log ; vi jstack.log

    发现监控线程大部分处于BLOCKED状态,不仅是监控线程,包括传输线程阻塞在log4j打印日志的地方;而堆栈显示传输线程全部阻塞在打印error日志的地方.查看监控日志,震惊了,传输线程一天输出了50个日志文件;全部在打印一个错误;而监控日志打印基本被堵到不能输出的情况;  控制台用的是同步日志,在多线程大量输出日志的时候抢锁阻塞; 处理了bug之后,传输线程不再不停输出ERROR,调整日志等级,将监控线程输出日志等级由INFO调整至ERROR,重启后,监控线程消费消息速度立马打到1s 2W的速度;问题解决;

  • 相关阅读:
    dijkstra 为什么不能解决负权边?
    Asteroids poj3041
    Dining poj3281
    炮兵阵地
    玉米田Corn Fields
    互不侵犯
    Golang---内存管理(内存分配)
    单例模式-Singleton
    HTTP2.0 学习
    Golang---GMP调度策略
  • 原文地址:https://www.cnblogs.com/largefacecat/p/13026697.html
Copyright © 2011-2022 走看看