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

、排除自身网络问题 可以使用站长工具测试网站速度:站长之家 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 具体的数值根据实际情况而定。 七、数据库分析 开启项目中的 sql 执行语句的日志打印,拿出该语句分析并加以优化(优化语句本身或者优化数据库) 设置最大连接数 复制代码 -- 查看最大连接数 show variables like '%max_connections%'; -- 当前连接的使用情况 show status like 'Threads%'; 复制代码 如果最大连接数的值太小可以根据实际情况进行修改,一般修改为1000即可 超时控制 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”即可解决。 DNS反向解析 MySQL数据库收到一个网络连接后,首先拿到对方的IP地址,然后对这个IP地址进行反向DNS解析从而得到这个IP地址对应的主机名。用主机名在权限系统里面进行权限判断。反向DNS解析是耗费时间的,有可能让用户感觉起来很慢。甚至有的时候,反向解析出来的主机名并没有指向这个IP地址,这时候就无法连接成功了。 可以在配置文件里面禁止MySQL进行反向DNS解析,只需在my.cnf的[mysqld]段落中加入如下行即可: skip-name-resolve (windows与linux下一样的) 表高速缓存 复制代码 -- 查看打开的表的数量 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设置 慢查询日志 记录的慢查询日志的目的是确认是否是由于某些语句执行缓慢而导致的服务器响应慢。需要开启慢日志查询记录,以及设置慢查询日志的时间阈值(秒) 复制代码 -- 查询慢日志记录是否开启。默认为关 OFF show variables like '%slow_query_log%'; -- 查询时间阈值(秒),超过这个执行时间的sql会被记录 show variables like 'long_query_time'; 复制代码 参考:https://www.cnblogs.com/yangc/p/6859985.html 标签: 数据库, Linux, 优化 好文要顶 关注我 收藏该文 Pagenny 关注 - 0 粉丝 - 0 +加关注 1 0 posted @ 2018-10-16 19:33 Pagenny 阅读(201) 评论(0) 编辑 收藏 刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。 【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库! 【推荐】华为云11.11普惠季 血拼风暴 一促即发 【拼团】腾讯云服务器拼团活动又双叒叕来了! 【推荐】腾讯云新注册用户域名抢购1元起 腾讯云1008 最新IT新闻: · 谷歌离职员工揭秘:谷歌云背后的一些故事 · 中年大妈们抢着用的短视频App究竟长啥样? · 冻卵无关职场发展,有报告说99%的冻卵者是找不到合适的人 · 百度成为Partnership on AI首个中国籍会员 · 征战下沉电商市场,头条能再造一个拼多多吗? » 更多新闻... 最新知识库文章: · 阿里云的这群疯子 · 为什么说 Java 程序员必须掌握 Spring Boot ? · 在学习中,有一个比掌握知识更重要的能力 · 如何招到一个靠谱的程序员 · 一个故事看懂“区块链” » 更多知识库文章... 公告https://www.cnblogs.com/Pagenny/p/9800123.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信