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

欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请注明出处 http://www.javaman.cn/jszw/web-slow

1、如果页面能正常访问,但是每个页面的打开速度都很慢,处理方式如下:

1)首先查看应用服务器和数据库服务器的cpu和内存使用情况是不是很高

windows服务器通过任务管理器查看

linux服务器通过top命令查看内存和cpu使用率:主要看1、2、3这三个指标有没有异常,内存和cpu有没有超过95%

详细参数参见下了文档

Linux查看CPU和内存使用情况:https://www.cnblogs.com/mengchunchen/p/9669704.html

2)如果两个服务器的内存都不高,通过下面语句找到oracle等待时长最多的sql带入plsql进行验证
SELECT ASH.USER_ID,
U.USERNAME,
S.SQL_TEXT,
SUM(ASH.WAIT_TIME + ASH.TIME_WAITED) TTL_WAIT_TIME
FROM V$ACTIVE_SESSION_HISTORY ASH, V$SQLAREA S, DBA_USERS U
WHERE ASH.SAMPLE_TIME BETWEEN SYSDATE - 15 / (24 * 60) AND SYSDATE
AND ASH.SQL_ID = S.SQL_ID
AND ASH.USER_ID = U.USER_ID
GROUP BY ASH.USER_ID, S.SQL_TEXT, U.USERNAME
ORDER BY TTL_WAIT_TIME

将sql放入plsql窗口,按【F5】进入执行计划页面

cost为耗费时长,执行顺序是按照缩进从右往左,从上到下执行,上图执行顺序为table access full--> table access full-->hash join-->all rows。如果一个列表查询的sql执行的cost耗费越大,结合oracle等待时长的sql,可以断定该sql存在问题!!!

将定位的sql提交给研发进行进一步的分析!!

目前发现数据库表中的部分索引建立以后失效的情况,经分析定位为:随着表的增长,where条件出来的数据太多,大于15%,使得索引失效,目前无法提前发现,只能通过上面的语句定位到执行缓慢的语句。

附录----执行计划详解:https://www.cnblogs.com/Dreamer-1/p/6076440.html

3)如果没有找到等待过长的sql语句,需要进一步排查应用服务器到oracle数据库主机的连接是否顺畅,有没有存在延迟!!

3.1)oracle的alert的日志文件超过4G,会导致连接报错

​ 可以通过下列语句找到alert.log的目录

select value from v$diag_info where name ='Diag Trace';

​ 找到该日志,然后备份删除

3.2)如果日志文件没有超过4G或者3.1步骤处理完仍然没有解决数据库连接超时或者慢的问题

​ 需要执行:tnsping IP:端口/实例名称

C:\Users\fangr>tnsping localhost:1521/orcl
TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 03-7月 -2021 17:08:45 Copyright (c) 1997, 2010, Oracle. All rights reserved. 已使用的参数文件:
D:\app1\fangr\product\11.2.0\dbhome_1\network\admin\sqlnet.ora 已使用 EZCONNECT 适配器来解析别名
尝试连接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orcl))(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))
OK (0 毫秒)

​ 执行结果如下图:如果超过1000毫秒,则连接可能存在问题!!需要协调ping一下是否丢包,或者协调客户定位下网络问题

扩展:AWR分析报告进行数据库的分析

觉得数据库慢的时候也可以通过AWR分析报告,对oracle进行性能分析找到一些oracle可能存在的潜在问题

对数据库缓慢时间段范围内生成awr报告!!

AWR报告生成方法:https://www.cnblogs.com/liyasong/p/oracle_report1.html

AWR报告详细解读:https://blog.csdn.net/u011334954/article/details/103953103?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242

该报告重点关注如下内容:

1)正常情况下DBCPU应该排在首位,%DB time每个耗时不能超过70%,如果超过就要针对处理!

2)根据SQL ordered by Elapsed Time,找到耗时比较长的sql,针对sql进行分析

3)查看SGA和PGA的内存使用是否过高,正常情况下不得超过主机内存的80%

2、如果页面能正常访问,添加记录或者更新网页卡住不动:

网页访问和列表加载正常,此刻很有可能存在oracle锁表的情况,通过下面的sql执行,找到被锁的表

select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo, dba_objects ao, v$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid;

找到被锁的表

通过下面sql定位到锁表的sql语句

SELECT A.USERNAME,
A.MACHINE,
A.PROGRAM,
A.SID,
A.SERIAL#,
A.STATUS,
C.PIECE,
C.SQL_TEXT
FROM V$SESSION A, V$SQLTEXT C
WHERE A.SID IN (SELECT DISTINCT T2.SID
FROM V$LOCKED_OBJECT T1, V$SESSION T2
WHERE T1.SESSION_ID = T2.SID)
AND A.SQL_ADDRESS = C.ADDRESS(+)
ORDER BY C.PIECE;

将找到的sql提交给研发,判断该sql语句是人为锁定的还是程序未提交导致的!

如果需要,可以通过下面的sql进行解锁

alter system kill session '68,51';     --分别为SID和SERIAL#号

3、如果排除oracle和sql的问题,那么进一步排查应用服务器的问题

1)调整程序连接的最大线程数和排队请求数

​ tomcat:将maxThreads="800" acceptCount="1000"调整为800和500代表允许最大线程数为800,可以同时处理800个请求,如果超 过800个线程,接受排队500个请求!

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="800" acceptCount="500"/>

​ weblogic:

进入WebLogic控制台——左边窗口的mydomain——servers——点击myserver——Configuration——General——点击Advanced Options的Show链接——最下面的Configure Execute Queues 链接——weblogic.kernel.Default链接——Thread Count参数。的却是隐藏的比较深。修改Thread Count的值,然后重启WebLogic就可以生效了。

2)根据服务器的内存大小,调整tomcat的内存,最大不超过应用服务器内存的60%

​ tomcat:

在“echo"UsingCATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"
weblogic:
直接修改user_projects\domains\base_domain\bin下的startWebLogic.cmd文件

  在它下面添加一下代码

  set JAVA_OPTIONS=-Xms256m –Xmx256m;

3)根据tomcat的catalina.log的具体报错反馈给开发进行查询,需要根据的实际报错

4)服务器重启大法

WEB应用访问缓慢的问题定位的更多相关文章

  1. WEB用户访问控制方法

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 一直以来,我对用户/权 ...

  2. 使用iptables防火墙限制web的访问PV

    使用iptables防火墙限制web的访问PV #!/bin/bash while true;do awk '{print $1}' /tmp/test/access.log| grep -v &qu ...

  3. web理论知识--网页访问过程(附有Django的web项目访问流程)

    当我们闲暇之余想上网看看新闻,或者看个电影,通常的操作是:打开电脑.打开浏览器.输入网址.浏览页面信息.点击自己感兴趣的连接......那么有没有想过,这些网页从哪里来的?过程中计算机又做了什么事情了 ...

  4. 自学Zabbix4.1 zabbix监控web服务器访问性能

    自学Zabbix4.1 zabbix监控web服务器访问性能 使用Zabbix实现对web性能的监控,通过它可以了解web站点的可用性以及性能.最终将各项指标绘制到图形中,这样我们可以了解到一个站点的 ...

  5. web端访问文件没有权限的问题

    背景 : ftp的PHP项目中的某些文件没有写入的权限..系统报注意错误!!! 原因 : 一般情况下,web端访问网站一般使用的是WWW权限(有限制的权限组)去访问, 但是我们编程开发的时候, 有可能 ...

  6. cloudera manager的7180 web界面访问不了的解决办法(图文详解)

    说在前面的话 我的机器是总共4台,分别为ubuntucmbigdata1.ubuntucmbigdata2.ubuntucmbigdata3和ubuntucmbigdata4.(注意啦,以下是针对Ub ...

  7. Wamp访问缓慢、本地主机访问缓慢解决方案

    Wamp访问缓慢.本地主机访问缓慢解决方案 Wamp访问速度缓慢可能的原因:          1.一般原因: Wamp的日志文件太大.处理办法,将位于wamp/logs/下的日志文件清空.     ...

  8. android开发 如何通过web服务器访问MYSQL数据库并且使其数据同步到android SQLite数据库?

    通过web服务器访问MYSQL数据库有以下几个过程: 1.在MySql下创建自己的数据库和自己的表单 2.连接数据库. 3.访问数据库 1.创建web工程 (服务器端) 在Myeclipse下新建一个 ...

  9. 首次远程安装 GlassFish 后以远程 Web 方式访问其后台管理系统出现错误的解决方法(修订)

    首次远程安装 GlassFish 服务后,如果以远程 Web 方式访问其后台管理系统,会提示 Secure Admin must be enabled to access the DAS remote ...

随机推荐

  1. Docker——Registry搭建私有镜像仓库

    前言 在 Docker 中,当我们执行 docker pull xxx 的时候,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库 ...

  2. Linux_yum工具基本概述

    一.什么是yum 1️⃣:yum是yellowdog update manager的简称,它能够实现rpm管理的所有操作,并能够自动解决各rpm包之间的依赖关系. 2️⃣:yum是rpm的前端工具,是 ...

  3. 惊奇发现KEIL也可以C++编译了

    在Github上面浏览下载的一个工程,可以用KEIL打开,但是我竟然找不到mian函数.找了一圈发现是用到了面向对象的编程方法,那就必须支持C++,他怎么实现的呢? 看配置工程:明显的一个不一样 -- ...

  4. spring mvc下实现通过邮箱找回密码功能

    1功能分析 通过spring mvc框架实现通过邮箱找回密码. 2 实现分析 主要是借助某个邮箱的pop3/smtp服务实现的邮件代发功能. 3 源码分析 3.1首先在用户表对应的javabean中加 ...

  5. 使用Mybatis插件 PageHelper 模拟百度分页(Day_20)

    生活中,要学会沉淀生命,沉淀心情,沉淀自己 模拟百度分页最终实现效果如图: 本篇博客运行环境 JDK8 + IntelliJ IDEA 2018.3 + Tomcat 8.5.31 准备好了我们就开始 ...

  6. Navicat Premium 15 linux 安装与激活 ArchLinux 2021

    查看了很多教程花了半小时才弄好可真不容易 参考https://github.com/orginly/navicat-keygen 下载地址 http://www.navicat.com.cn/down ...

  7. Python - random 库的详细使用

    前言 为啥突然写这个?因为用到就写呗,感觉对生成数据很有用,之前都是百度别人的,今天来对着官方文档写,超级标准! 这边只讲常用的,看了下文档还有什么数学方法,太高级好像用不上 返回整数 random. ...

  8. Python+Selenium学习笔记8 - 多表单&多窗口切换

    1.多表单切换 下图为待测页面:内嵌百度首页 切换到百度首页进行操作 1 # coding = utf-8 2 3 from selenium import webdriver 4 import os ...

  9. 执行Selenium后在temp目录下产生临时文件scoped_dir chrome_BITS

    环境:Windows selenium 3.141.0 Python 3.8.10 Chrome 90.0.4430.212 ChromeDriver 90.0.4430.24 最近发现执行完Sele ...

  10. 书列荐书 |《刻意练习》安德斯&#183;艾利克森,罗伯特&#183;普尔著

    花了两天的时间,一气呵成的读完了这本书.凝练的精华就是:首先,世界上并没有真正的天才这一说.基因可能会起作用,但是经过后天大量的刻意练习,基因的这种作用会弱化.刻意练习需要专注.及时的反馈,并根据反馈 ...