• 用Java JMC控制台分析线程阻塞原因


    问题

    今天在玩dianping-CAT框架时,发现请求某个页面的时候,发生了阻塞。浏览器得不到响应。

    环境

    本地Tomcat 8 , Windows 系统。

    解决

    启动jmc 控制台,找到BLOCKED 线程:
    JMC BLOCKED

    然后定位到代码:

    发现是我昨天加了一行代码:

    System.out.println();
    
    private TransactionReport getHourlyReport(Payload payload) {
    		String domain = payload.getDomain();
    		String ipAddress = payload.getIpAddress();
    		ModelRequest request = new ModelRequest(domain, payload.getDate()).setProperty("type", payload.getType())
    								.setProperty("ip", ipAddress);
    
    		if (m_service.isEligable(request)) {
    			ModelResponse<TransactionReport> response = m_service.invoke(request);
    			TransactionReport report = response.getModel();
    			if (report == null) {
    				System.out.println("m_service: " + m_service.getName() + " class: " + m_service.getClass().getCanonicalName());
    				throw new RuntimeException("Internal error: no response data for " + request + "!");
    			}
    			return report;
    		} else {
    			throw new RuntimeException("Internal error: no eligable transaction service registered for " + request + "!");
    		}
    	}
    

    这个位置导致请求线程阻塞了。

  • 相关阅读:
    Android Training
    Android Training
    简述Activity与Window关系
    简述Activity生命周期
    Python基础之元组及range
    python基础数据类型之列表
    python之字符串
    python基础之int整型
    python基础知识之格式化
    Python基础知识初识 (二)
  • 原文地址:https://www.cnblogs.com/slankka/p/10456083.html
Copyright © 2020-2023  润新知