服务器响应慢的分析与解决

一、排除自身网络问题

可以使用站长工具测试网站速度:站长之家

image.png


二、检查是否和浏览器有关

换一个浏览器访问网站,进行同样的操作,看是否存在差异。
之前有遇到一个问题是在 MacBook 的谷歌浏览器上,有一步操作始终无法呈现结果,按 F12 查看控制台也没有报错,但是有一个接口始终处于pending状态。于是换个浏览器尝试,没有出现该问题。最后发现是由于该接口Get请求后携带的参数在浏览器中的默认编码方式不一样导致的,改为 utf-8 编码后解决问题


三、查看各项服务的日志

看看是不是程序抛出了异常。当然这里是服务响应比较慢,并不是不返回,也不是http返回500。查看一下 tomcat 中的日志或者是程序记录的业务日志。
一般来说,也就:

// linux 中

# cd xx/tomcat/logs
# tail -f catalina.out

四、查看服务器各项参数

现在大多公司都有服务监控系统,有cpu、内存、网卡、磁盘、url请求的响应时间请求并发、jvm相关等等的监控。当然公司没有监控系统也不用慌,监控系统只是看起来直观一点。没有监控系统,还是可以通过linux命令、JDK自带的jps, jstack, jmap, jconsole、IBM的HeapAnalyzer以及比较直观监控的JProfiler等来看。

top 命令查看负载(可以安装一个 htop 工具,比 top 更直观更强大)

                      top命令界面

                        htop界面

可以直接使用 yum install -y htop 命令安装htop

Tasks行展示了目前的进程总数及所处状态,要注意zombie,表示僵尸进程,不为0则表示有进程出现问题

Cpu(s)行展示了当前CPU的状态,us表示用户进程占用CPU比例,sy表示内核进程占用CPU比例,id表示空闲CPU百分比,wa表示IO等待所占用的CPU时间的百分比。wa占用超过30%则表示IO压力很大

Mem行展示了当前内存的状态,total是总的内存大小,userd是已使用的,free是剩余的,buffers是目录缓存。

Swap行同Mem行,cached表示缓存,用户已打开的文件。如果Swap的used很高,则表示系统内存不足

在top命令下,按1,则可以展示出服务器有多少CPU,及每个CPU的使用情况。一般而言,服务器的合理负载是CPU核数*2。也就是说对于8核的CPU,负载在16以内表明机器运行很稳定流畅。如果负载超过16了,就说明服务器的运行有一定的压力了。

如果CPU占用过高,可以根据 pid 和 jstack 工具详细查看是由于哪些代码造成的。


五、项目本身分析

检查项目中的一些比如 线程池、 数据库连接池 等参数的配置。(一些生产服务上不需要开启的服务也应该关闭,比如 swagger UI 等)


六、虚拟机分析

使用top指令查看虚拟机的内存占用情况,有时候可以发现虽然虚拟机占用内存的百分比不大却有明显的上限值,我们就需要去查看虚拟机的配置情况。

解决方法(以tomcat为例):

image

具体的数值根据实际情况而定。


七、数据库分析

  1. 开启项目中的 sql 执行语句的日志打印,拿出该语句分析并加以优化(优化语句本身或者优化数据库)
  2. 设置最大连接数
-- 查看最大连接数
show variables like ‘%max_connections%‘;
-- 当前连接的使用情况
show status like ‘Threads%‘;

如果最大连接数的值太小可以根据实际情况进行修改,一般修改为1000即可

  1. 超时控制

mysql存在一项属性“wait_timeout”,默认值为28800秒(8小时),wait_timeout的值可以设定,但最多只能是2147483,不能再大了。也就是约24.85天 ,可以通过show global variables like ‘wait_timeout‘;命令来查看。

wait_timeout的含义是:一个connection空闲超过8个小时,Mysql将自动断开该connection,通俗的讲就是一个连接在8小时内没有活动,就会自动断开该连接。由于dbcp没有检验该connection是否有效,用其进行数据操作便会出现异常。

如果是由超时控制引起的问题,不建议修改wait_timeout的值,在数据库连接的url的后面加上“&autoReconnect=true&failOverReadOnly=false”即可解决。

  1. DNS反向解析

MySQL数据库收到一个网络连接后,首先拿到对方的IP地址,然后对这个IP地址进行反向DNS解析从而得到这个IP地址对应的主机名。用主机名在权限系统里面进行权限判断。反向DNS解析是耗费时间的,有可能让用户感觉起来很慢。甚至有的时候,反向解析出来的主机名并没有指向这个IP地址,这时候就无法连接成功了。 可以在配置文件里面禁止MySQL进行反向DNS解析,只需在my.cnf的[mysqld]段落中加入如下行即可:

skip-name-resolve (windows与linux下一样的)

  1. 表高速缓存
-- 查看打开的表的数量
show global status like ‘open%tables%‘;
-- 查看缓存的上限值
show variables like ‘table_open_cache‘;

open_tables:是当前在缓存中打开表的数量。
opened_tables:是mysql自启动起,打开表的数量。
当Opened_tables数值非常大,说明cache太小,导致要频繁地open table,可以查看下当前的table_open_cache设置

  1. 慢查询日志
    记录的慢查询日志的目的是确认是否是由于某些语句执行缓慢而导致的服务器响应慢。需要开启慢日志查询记录,以及设置慢查询日志的时间阈值(秒)
-- 查询慢日志记录是否开启。默认为关 OFF
show variables like ‘%slow_query_log%‘;
-- 查询时间阈值(秒),超过这个执行时间的sql会被记录
show variables like ‘long_query_time‘;


参考:https://www.cnblogs.com/yangc/p/6859985.html

原文地址:https://www.cnblogs.com/Pagenny/p/9800123.html

时间: 2024-10-14 23:39:46

服务器响应慢的分析与解决的相关文章

MySQL数据库服务器逐渐变慢分析与解决

一.检查系统的状态 通过操作系统的一些工具检查系统的状态,比如CPU.内存.交换.磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能不是一个正常的状态,因为cpu可能正等待IO的完成.除此之外,还应观注那些占用系统资源(cpu.内存)的进程. 1.使用sar来检查操作系统是否存在IO问题 #sar -u 2 10 — 即每隔2秒检察一次,共执行20次. 结果示例: 注:在redhat下,%system就是所谓的%wio. Linux 2.4.21-20.ELs

C#发送邮件时提示:“不允许使用邮箱名称。服务器响应为:”的错误解决办法

由于项目需要,要为客户提供一个定期发送邮件的程序.本来原来自己还写过,但新写的程序一晚上也没通过测试,总是提示"不允许使用邮箱名称.服务器响应为..." 经过在网上搜索查找解决办法,似乎解决办法都是一个,就是把smtp.UseDefaultCredentials = true;写到smtp.Credentials = new NetworkCredential("myusername", "mypwd");的前面. 但使用此方法,也未能解决问题.

Apache服务器访问过慢分析及解决

起因:线上的一台服务器,最近总是出现 访问 很慢的情况发生,点击一个链接要2秒钟以上才能打开,按照我们对于访问人数的估计,服务器应该不至于响应这么慢,从而需要针对这个问题进行分析,来解决网站访问过慢. 分析: 1.首先,在页面访问变慢情况发生时,使用 top 命令查看了服务器的负载情况,发现负载并不高,初步估计不是程序的问题. 2.然后,查看了线程中的 httpd 的数量, ps -aux | grep httpd | wc -l 发现,线程数已经达到了 apache 设置的最大值.由此断定是网

c/c++服务器程序内存泄露问题分析及解决

由 www.169it.com 搜集整理 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题:Garbage Collection技术在Java中已经比较成熟,但是在c/c++领域的发展并不顺畅,虽然很早就有人思考

几种经典的网络服务器架构模型的分析与比较

原文出处:http://blog.csdn.net/lmh12506/article/details/7753978 前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用:事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序.ftp 服务器程序等.相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率. 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,

SQL Server 磁盘请求超时的833错误原因分析以及解决

本文出处:http://www.cnblogs.com/wy123/p/6984885.html 最近遇到一个SQL Server服务器响应极度缓慢,并且出现客户端请求报错的情况,在数据库中的errorlog中出现磁盘请求超过一定时间才完成的error消息.对于此类问题,到底是存储系统或者磁盘的故障,还是SQL Server 自己的问题,亦或是应用程序引发的呢?又要如何解决?本文将对引起此问题的某一方面的因素进行简单的分析,但是无法涵盖所有潜在的可能性,因此遇到类似问题还要做具体的分析. SQL

php-cgi进程占用cpu资源过大原因分析及解决

一,开启日志记录,为以后排查做准备 1.1 开启php-fpm.conf的错误日志和慢执行日志和常规日志, 采样一个小时,就可以根据这些日志的内容进行分析问题error_log = /tmp/error.log //错误日志access.log = /tmp/access.$pool.log //常规日志,记录每次访问时间,记录不同参数,以防止恶意攻击,后面会详细解析access.format = "%R – %u %t \"%m %r%Q%q\" %s %f %{mili}

  挖矿程序minerd,wnTKYg入侵分析和解决

挖矿程序minerd,wnTKYg入侵分析和解决                                   作者:CYH 一.起因:最近登陆一台redis服务器 发现登陆的时间非常长,而且各种命令敲大显示出的内容延迟很高 二,分析:  首先我安装了iftop监控em1这个网卡流量 Iftop -i  em1 发现里面的流量使用很低,没多少服务使用大的流量,没占用带宽,排除了ddos大流量攻击可能 接着我输入命令top 查看各种负载,一看吓一跳,cpu平均负载达到70左右,使用率达到99

SQL Server2005索引碎片分析和解决方法

SQL Server2005索引碎片分析和解决方法 本文作者(郑贤娴),请您在阅读本文时尊重作者版权. 摘要: SQL Server,为了反应数据的更新,需要维护表上的索引,因而这些索引会形成碎片.根据工作量的特征,这些碎片会影响对应的工作性能.此文帮助决定是否需要整理碎片以改善性能的信息.SQL Serve提供一些命令来实现索引的碎片整理.这里比较其中两个命令:DBCC DBREINDEX 和 DBCC INDEXDEFRAG. 关键词: SQL Server;索引碎片;数据库优化毫无疑问,给