Java HttpUrlConnection在CentOS上运行时占用100%的CPU

Java HttpUrlConnection在CentOS上运行时占用100%的CPU,java,tomcat,centos,jmeter,cpu-usage,Java,Tomcat,Centos,Jmeter,Cpu Usage,我有一个HttPURLConnection程序,它与运行在同一台机器(本例中为CentOS)上但部署在其他tomcat服务器上的某个应用程序建立连接。这意味着在部署在不同Tomcat上的两个应用程序之间建立HttpConnection,其中两个Tomcat都运行在同一台机器上 一切正常,当我提出一个请求时,我在200毫秒内得到了响应。 但是,当应用程序通过JMeter加载100个并行运行的无限循环请求时,应用程序开始执行高CPU处理 这是我的密码: public String sendHttpG

我有一个HttPURLConnection程序,它与运行在同一台机器(本例中为CentOS)上但部署在其他tomcat服务器上的某个应用程序建立连接。这意味着在部署在不同Tomcat上的两个应用程序之间建立HttpConnection,其中两个Tomcat都运行在同一台机器上

一切正常,当我提出一个请求时,我在200毫秒内得到了响应。 但是,当应用程序通过JMeter加载100个并行运行的无限循环请求时,应用程序开始执行高CPU处理

这是我的密码:

public String sendHttpGetReq(String urlParameters,String msisdn, InNodeConfig inNodeConfig, InNodeDetails inNodeDetails)
{
    Logger.sysLog(LogValues.info, this.getClass().getName(),"["+msisdn+"] Inside sendHttpGetReq");
    String response = "";
    //response =  "{\"id\":\"584371732\",\"status_billing\":\"INSUFFICIENT_FUNDS\",\"status_sms\":\"NO_SMS\"}";
    String url = "";
    URL obj = null;
    HttpURLConnection con = null;
    try
    {
        url = "http://"+inNodeConfig.getServerIp()+":"+inNodeConfig.getServerPort()+inNodeConfig.getServiceUri();
        url = url+urlParameters;
        Logger.sysLog(LogValues.info, this.getClass().getName(),"["+msisdn+"] url = "+url);
        obj = new URL(url);
        con = (HttpURLConnection) obj.openConnection();     

        con.setDoOutput(true);
        con.setRequestMethod("GET");
        con.setConnectTimeout(Integer.parseInt(inNodeConfig.getConTimeOut()));
        con.setReadTimeout(Integer.parseInt(inNodeConfig.getConTimeOut())+1000);

        int responseCode = con.getResponseCode();
        Logger.sysLog(LogValues.info, this.getClass().getName(),"["+msisdn+"] HTTP Response Code : " + responseCode);
        Logger.sysLog(LogValues.info, this.getClass().getName(),"["+msisdn+"] HTTP Response message : " + con.getResponseMessage());

        if(responseCode == 202 || responseCode == 200)
        {   
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer responseBf = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                responseBf.append(inputLine);
            }
            in.close();

            Logger.sysLog(LogValues.info, this.getClass().getName(),"["+msisdn+"] Response received = "+responseBf.toString());

            response = responseBf.toString();
            responseBf = null;
            if(inNodeDetails.getOperator().equalsIgnoreCase("digicel"))
            {
                if(response.startsWith("Received"))
                {
                    response = "ok";
                }
                else if(response.startsWith("{"))
                {
                    // {"id":"185688","status_billing":"INSUFFICIENT_FUNDS","status_sms":"FAILED"}
                    Logger.sysLog(LogValues.APP_DEBUG, this.getClass().getName(),"["+msisdn+"] Parsing json response.");
                    Gson gson = new Gson(); 
                    JsonResponse jsonResponse = gson.fromJson(response, JsonResponse.class);

                    if(jsonResponse.getStatus_billing().equalsIgnoreCase("ok") || jsonResponse.getStatus_billing().contains("SUCCESS")){
                        response="ok";
                    }
                    else if(jsonResponse.getStatus_billing().equalsIgnoreCase("INSUFFICIENT_FUNDS"))
                    {
                        Logger.sysLog(LogValues.APP_DEBUG, this.getClass().getName(),"["+msisdn+"] Response received for INSUFFICIENT_FUNDS.");
                        response = "low balance";
                    }
                    else if(jsonResponse.getStatus_billing().equalsIgnoreCase("FAILED"))
                    {
                        Logger.sysLog(LogValues.APP_DEBUG, this.getClass().getName(),"["+msisdn+"] Failure Response received for some other reason.");
                        response = "nok";
                    }           
                    else
                    {
                        if(inNodeDetails.getCountry().equalsIgnoreCase("JAM")||inNodeDetails.getCountry().equalsIgnoreCase("HAI")){
                            response=jsonResponse.getStatus_billing();
                        }
                        else{
                            gson = null;
                            jsonResponse = null;
                        }

                    }
                }
                else
                {
                    if(inNodeDetails.getCountry().equalsIgnoreCase("HAI") && response.contains("EXCEPTION"))
                    {
                        response = "ok";
                    }
                    else
                    {
                    Logger.sysLog(LogValues.APP_DEBUG, this.getClass().getName(),"["+msisdn+"] Unknown response.");
                    response = "nok";
                    }
                }
            }
        }
        else if(responseCode == 502 || responseCode == 500)
        {
            if(inNodeDetails.getCountry().equalsIgnoreCase("HAI") || inNodeDetails.getCountry().equalsIgnoreCase("JAM"))
            {
                response = "ok";
            }
            else
            {
                response = "nok";
            }

        }
        else
        {
            response = "nok";
            /*Map<String,List<String>> responseMap = con.getHeaderFields();
            for (Map.Entry entry : responseMap.entrySet()) {
                Logger.sysLog(LogValues.APP_DEBUG, Utility.class.getName(), "header key = "+entry.getKey() + " value = " + entry.getValue());
            }*/
        }

        return response;
    }
    catch(SocketTimeoutException ex)
    {
        Logger.sysLog(LogValues.APP_DEBUG, Utility.class.getName(), "Read Timeout occurs for msisdn = "+msisdn);
        return "ReadTimeout";
    }
    catch(ConnectTimeoutException ex1)
    {
        Logger.sysLog(LogValues.APP_DEBUG, Utility.class.getName(), "ConnectTimeoutException occurs for msisdn = "+msisdn);
        return "ConnectionTimeout";
    }
    catch(ConnectException ex2)
    {
        Logger.sysLog(LogValues.APP_DEBUG, Utility.class.getName(), "ConnectException occurs for msisdn = "+msisdn);
        return "ConnectionTimeout";
    }
    catch(JsonSyntaxException ex3){
        response=null;
        return response;
    }
    catch(MalformedJsonException ex4){
        response=null;
        return response;
    }
    catch(Exception e)
    {
        Logger.sysLog(LogValues.error, this.getClass().getName(),"["+msisdn+"] Internal Error occured"+coreException.GetStack(e));
        return response;
    }
    finally
    {
        response = null;
        url = null;
        obj = null;
        con.disconnect();
        Logger.sysLog(LogValues.APP_DEBUG, this.getClass().getName(),"Calling GC.");
        System.gc();
    }
    //return response;

}
public String sendHttpGetReq(字符串urlParameters、字符串msisdn、InNodeConfig InNodeConfig、InNodeDetails InNodeDetails)
{
Logger.sysLog(LogValues.info,this.getClass().getName(),“[”+msisdn+“]在sendHttpGetReq中”);
字符串响应=”;
//响应=“{\“id\”:\“584371732\”,“状态\账单\”:“资金不足\”,“状态\短信\\”:“无短信\”;
字符串url=“”;
URL obj=null;
HttpURLConnection con=null;
尝试
{
url=“http://”+inNodeConfig.getServerIp()+:“+inNodeConfig.getServerPort()+inNodeConfig.getServiceUri();
url=url+url参数;
Logger.sysLog(LogValues.info,this.getClass().getName(),“[”+msisdn+“]url=“+url”);
obj=新URL(URL);
con=(HttpURLConnection)obj.openConnection();
con.设置输出(真);
con.setRequestMethod(“GET”);
con.setConnectTimeout(Integer.parseInt(inNodeConfig.getConTimeOut());
con.setReadTimeout(Integer.parseInt(inNodeConfig.getConTimeOut())+1000);
int responseCode=con.getResponseCode();
Logger.sysLog(LogValues.info,this.getClass().getName(),“[”+msisdn+“]HTTP响应代码:“+responseCode”);
Logger.sysLog(LogValues.info,this.getClass().getName(),“[”+msisdn+“]HTTP响应消息:“+con.getResponseMessage());
如果(响应代码==202 | |响应代码==200)
{   
BufferedReader in=新的BufferedReader(新的InputStreamReader(con.getInputStream());
字符串输入线;
StringBuffer responseBf=新的StringBuffer();
而((inputLine=in.readLine())!=null){
响应bF.append(输入行);
}
in.close();
Logger.sysLog(LogValues.info,this.getClass().getName(),“[”+msisdn+“]Response received=“+responseBf.toString());
response=responseBf.toString();
responseBf=null;
if(inNodeDetails.getOperator().equalsIgnoreCase(“digicel”))
{
if(response.startsWith(“Received”))
{
响应=“确定”;
}
else if(response.startsWith(“{”))
{
//{“id”:“185688”,“状态账单”:“资金不足”,“状态短信”:“失败”}
Logger.sysLog(LogValues.APP_DEBUG,this.getClass().getName(),“[”+msisdn+“]解析json响应”);
Gson Gson=新的Gson();
JsonResponse=gson.fromJson(response,JsonResponse.class);
if(jsonResponse.getStatus_billing().equalsIgnoreCase(“ok”)| | jsonResponse.getStatus_billing()包含(“成功”)){
响应=“确定”;
}
else if(jsonResponse.getStatus\u billing().equalsIgnoreCase(“资金不足”))
{
Logger.sysLog(LogValues.APP_DEBUG,this.getClass().getName(),“[”+msisdn+“]收到资金不足的响应。”);
响应=“低平衡”;
}
else if(jsonResponse.getStatus_billing().equalsIgnoreCase(“失败”))
{
Logger.sysLog(LogValues.APP_DEBUG,this.getClass().getName(),“[”+msisdn+“]由于某些其他原因收到故障响应”);
响应=“nok”;
}           
其他的
{
if(inNodeDetails.getCountry().equalsIgnoreCase(“JAM”)| | inNodeDetails.getCountry().equalsIgnoreCase(“HAI”)){
response=jsonResponse.getStatus_billing();
}
否则{
gson=null;
jsonResponse=null;
}
}
}
其他的
{
if(inNodeDetails.getCountry().equalsIgnoreCase(“HAI”)和&response.contains(“异常”))
{
响应=“确定”;
}
其他的
{
Logger.sysLog(LogValues.APP_DEBUG,this.getClass().getName(),“[”+msisdn+“]未知响应”);
响应=“nok”;
}
}
}
}
else if(responseCode==502 | | responseCode==500)
{
if(inNodeDetails.getCountry().equalsIgnoreCase(“HAI”)| | inNodeDetails.getCountry().equalsIgnoreCase(“JAM”))
{
响应=“确定”;
}
其他的
{
响应=“nok”;
}
}
其他的
{
响应=“nok”;
/*Map responseMap=con.getHeaderFields();
对于(Map.Entry:responseMap.entrySet()){
Logger.sysLog(LogValues.APP_DEBUG,Utility.class.getName(),“header key=“+entry.getKey()+”value=“+entry.getValue());
}*/
}
返回响应;
}
捕获(SocketTimeoutException ex)
{
Logger.sysLog(LogValues.APP_DEBUG,Utility.class.getName(),“msisdn=“+msisdn”发生读取超时);
返回“ReadTimeout”;
}
捕获(ConnectTimeoutException ex1)