在这以后里分享一篇关于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套接字拖死。

【转】web应用缓慢故障分析的更多相关文章

  1. Web服务网站故障分析常用的命令

    1.查看TCP连接状态netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn netstat -n | awk ‘/^tcp/ {++S[$NF]}; ...

  2. Linux Web服务器网站故障分析常用的命令

    系统连接状态篇: 1.查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ { ...

  3. web开发常见性能优化方式

    经常使用的高并发. 高性能web,数据库server.  1.html 静态化 : 如新闻频道更新的非常快,都是通过cms静态生成(门户,信息公布类型的站点,交互性高的如猫扑的大杂烩也是静态化,实时静 ...

  4. 转载过来的参考内容---常规36个WEB渗透测试漏洞描述及修复方法----很详细

        常规WEB渗透测试漏洞描述及修复 --转自:http://www.51testing.com/html/92/n-3723692.html (1). Apache样例文件泄漏 漏洞描述 apa ...

  5. Web安全常见漏洞修复建议

    转载地址:https://security.pingan.com/blog/17.html SQL注入 在服务器端要对所有的输入数据验证有效性. 在处理输入之前,验证所有客户端提供的数据,包括所有的参 ...

  6. 为图片存储而作——记一次UEditor源码的修改

    本文版权归博客园和作者吴双本人共同所有.  写在前面 这是一个数据爆发的网络时代,大家习惯于浏览图文直观带给我们的快速信息.大图片的存储和浏览经常会成为Web服务器的瓶颈.试想如果你的Web服务器依然 ...

  7. angularJs $templateCache

    模板加载后,AngularJS会将它默认缓存到 $templateCache 服务中.在实际生产中,可以提前将模板缓存到一个定义模板的JavaScript文件中,这样就不需要通过XHR来加载模板了 $ ...

  8. 一步一步弄懂angularJS基础

    问题1:ng-app指令的使用以及自定义指令 <!doctype html> <!--这里的ng-app的属性值就是模块的名称,也就是 angular.module("My ...

  9. WEB应用访问缓慢的问题定位

    WEB应用访问缓慢的问题定位 欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请注明出处 http://w ...

随机推荐

  1. VBA 语句集400句

    定制模块行为(1) Option Explicit '强制对模块内所有变量进行声明    Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  ...

  2. 前端开发-5-HTML-总结

    1.总体 资源:https://www.processon.com/view/link/5ad1c2d0e4b0b74a6dd64f3c html head标签 title 显示网站的标题 meta ...

  3. input 提交属性 hidden属性

    name名字最好和你后台属性的成员变量对应,否则在参数传递的时候接收不到出现空指针异常.一般表单提交后input会以name的值=value的值的形式传给后台.如:<input type=&qu ...

  4. ubuntu 安装搜狗输入法

    from:http://blog.csdn.net/qq_21792169/article/details/53152700 最近开始学习linux 在安装输入法中遇到的一些问题,最终成功安装,也得益 ...

  5. 安装 neo4j 在 .../bin 目录下使用 ./neo4j 没反应 和 从csv 导入数据到neo4j

    可以使用 /bin/sh ./neo4j start 如果提示:./neo4j: 28: set: Illegal option -o pipefail 那么 ubuntu”set Illegal o ...

  6. urllib 和urllib2 模块使用简例

    一.最简单的使用 import urllib,urllib2 response = urllib2.urlopen("https://www.baidu.com") print r ...

  7. keras各种优化方法总结 SGDmomentumnesterov

    http://blog.csdn.net/luo123n/article/details/48239963 前言 这里讨论的优化问题指的是,给定目标函数f(x),我们需要找到一组参数x,使得f(x)的 ...

  8. SQL 数据库事务 存储过程练习

    数据库事务: 数据库事务(Database Transaction) 是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源. ...

  9. intellij idea14 +svn配置

    说明:使用TortoiseSVN客户端,安装时必须选择client tools,否则不会有svn.exe,也就不能支持intellij idea的svn插件,因为intellij idea是使用命令行 ...

  10. cubic与spline插值点处的区别

    cubic与spline都是Matlab的三次样条插值法,但是它们在插值点处仍然有着很微妙的区别,这个区别说明不了两种方法的好坏,只能根据实际情况进行合理筛选.以一维插值为例: clc clear % ...