web应用缓慢故障分析

转载 2016年05月31日 12:01:57

在这以后里分享一篇关于web应用缓慢的分析过程,感觉挺有用的。

原文出处:http://xjsunjie.blog.51cto.com/999372/751585



友在一家购物网站做运维不久,今日打电话说前台页面打开比较慢订单无法正常投递,但是查看CPU使用率较低没什么压力,只是内存稍高86%左右,磁盘读写也很正常,咨询我怎么进行解决。我问了他一些基本的系统架构问题,知道是F5做的负载均衡分发到前端10台应用服务器上,中间件是JBOSS,后端数据库是ORACLE.整理了下思路,决定让朋友进行如下分析:

一、登陆前端应用服务器,首先查看统计ip连接数
[user@local ~]$ netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
      1 
      1 Address
      1 servers)
      2 172.16.100.35
      2 172.16.100.38
      2 172.16.100.45
      4 127.0.0.1
     10 172.16.100.18
     20 172.16.100.8
   2048 172.16.100.98 #在服务器和负载均衡间有2048个连接
查看JBOSS应用端口8080的情况
[user@local ~]$ netstat -ntu |grep 8080
 
tcp        0      0 172.16.100.26:8080     172.16.100.98:19593           TIME_WAIT   
tcp        0      0 172.16.100.26:8080     172.16.100.98:16777           TIME_WAIT   
tcp        0      0 172.16.100.26:8080     172.16.100.98:11913           TIME_WAIT   
tcp        0      0 172.16.100.26:8080     172.16.100.98:1929            TIME_WAIT   
tcp        0      0 172.16.100.26:8080     172.16.100.98:53641           TIME_WAIT   
tcp        0      0 172.16.100.26:8080     172.16.100.98:43401           TIME_WAIT   
tcp        0      0 172.16.100.26:8080     172.16.100.98:36233           TIME_WAIT   
tcp        0      0 172.16.100.26:8080     172.16.100.98:28040           TIME_WAIT   
tcp        0      0 172.16.100.26:8080     172.16.100.98:5000            TIME_WAIT   
...............................................................
...............................................................
...............................................................
[user@local ~]$ netstat -ntu |grep 8080|grep TIME_WAIT |wc  -l
2003
通过以上内容显示,在前端应用服务器和负载均衡间产生了大量TCP等待,这正是消耗内存并把前台应用拖慢的主要原因。由负载均衡分发到应用服务器的大量请求可能由于JBOSS的处理瓶颈产生了等待,实际处理的请求远小于分发过来的请求。
 
二、查看JBOSS连接数设置
一般中间件jboss连接后端的oracle,在deploy下会有个文件oracle-ds.xml,我们看一下它连接数据库的代码:
<local-tx-datasource>
    <jndi-name>jdbc/TETD</jndi-name>
    <connection-url>jdbc:oracle:thin:@172.16.100.18:1521:orcl</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>TETD_QT</user-name>
    <password>Hpoui&bmn$m#e$m_n20uytwe@iil</password>
        <min-pool-size>20</min-pool-size>
        <max-pool-size>50</max-pool-size>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name> 
 注意:<min-pool-size>的值设的是20,<max-pool-size>设的值是50
 
三、查看ORACLE连接数设置
SQL>select count(*) from v$process --当前的连接数
显示为45
SQL>select value from v$parameter where name = 'processes' --数据库允许的最大连接数
显示为600
(注:当数据库最大连接数不够时会出现客户端连接间歇性失败,报错ORA-12519)
 
通过以上数据分析,在ORACLE端显示的连接数并没有体现出应有的压力,那么瓶颈在哪?应该是JBOSS上,JBOSS的连接池参数设置的太小,导致前端的请求卡在JBOSS处而不能正常通过JBOSS连接到后端ORACLE,从而导致前台应用缓慢订单不正常。
 
分析完毕后,告诉朋友增大JBOSS连接池参数,把<min-pool-size>调整为200,</min-pool-size>调整为500.后来朋友调整了JBOSS连接池参数后,问题得到了显著缓解,内存使用率也降下来了。
这一事例告诉我们,一个水管中间最细处往往决定了通过的水流量,我们在优化后端ORACLE数据库的同时也别忘了优化中间件的参数。
 
 
 
补充1、修改ORACLE最大连接数:
 
#修改oracle最大连接数:
alter system set processes = 1000  scope = spfile;
 
重启数据库:
shutdown immediate;
startup;

 

补充2、修改/etc/sysctl.conf文件
net.ipv4.tcp_max_tw_buckets = 3000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为 3000。此项参数可以控制TIME_WAIT套接字的最大数量,避免服务器被大量的TIME_WAIT套接字拖死。

 

故障分析:数据库一致性关闭缓慢问题诊断

想必我们大家都知道,Shutdown immediate即一致性关闭数据库,数据库下次启动不需要做实例恢复即可open数据库。那么当数据库一致性关闭出现缓慢等状况时,该怎么办呢?那我们就来一起分析一下...
  • Enmotech
  • Enmotech
  • 2017年12月26日 00:00
  • 116

台式机的故障原因及分析

本文简单的介绍了台式机故障后根据主机箱发出的蜂鸣声而找出故障的方法,共计8种故障原因分析,为个人经验之所得。...
  • chuheng1995
  • chuheng1995
  • 2015年03月24日 15:20
  • 275

思科路由器:网络故障诊断与排除命令

在出现网络故障时,作为网络工程师能够及时定位故障并解决网络故障是十分重要的。CiscoISO操作系统软件提供了一组功能丰富的命令,可以用来进行网络故障查找与排除、问题诊断以及性能检测。命令大致可以分为...
  • Galdys
  • Galdys
  • 2011年10月22日 22:10
  • 704

飞机加油问题,据说是微软的面试题。

昨天晚上在 http://community.csdn.net/Expert/topic/3638/3638447.xml?temp=.7129938看到这道题,很有趣,试着求解一番。关于飞机加油问题...
  • sjjf
  • sjjf
  • 2005年07月25日 14:05
  • 4852

一次web应用没有响应的原因分析

前几天,我们应用中遇到一个问题,在发布之后运行很短时间内某些页面就没有响应了。 开始没太当回事,因为环境的原因,从数据库查询数据缓慢是有可能的。但后来发现数据库空闲的时候仍然这样。 1、首先,分析...
  • superscorpio
  • superscorpio
  • 2014年08月04日 16:38
  • 770

TFT液晶显示常见的问题总结

字体中12*6等代表的意义:根据选择的字体1206或1608,它们表示字符是12个像素高或16个像素高(对应第一个for),字符的宽度是6或8(对应嵌套的for),通过for来遍历像素定义中的每一个数...
  • guohengsheng3882
  • guohengsheng3882
  • 2017年10月22日 15:58
  • 193

返回顶部代码 缓慢的返回顶部

$('body,html').animate({scrollTop:0},500);
  • xuelang532777032
  • xuelang532777032
  • 2017年04月20日 15:17
  • 359

Linux故障分析

了解linux的引导流程 补充: 进程---init(运行中的一段程序) 系统中区分进程使用id(一般是随机的,不固定) init---1 为id=0(内核调度器,获取cpu时间,进行进程的...
  • w19911111
  • w19911111
  • 2011年12月14日 11:50
  • 349

缓慢回到顶部

#return { display: block; width: 40px; height: 40px; background-color: orange; position: fixed;...
  • Ag_wenbi
  • Ag_wenbi
  • 2017年02月08日 17:02
  • 356

缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计

在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据...
  • huojiao2006
  • huojiao2006
  • 2016年09月21日 10:06
  • 706
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:web应用缓慢故障分析
举报原因:
原因补充:

(最多只允许输入30个字)