linux 查看tomcat启动_一次tomcat启动特别慢的排查
事件的起因是有一次tomcat启动,花了32分钟才启动好,非常的诡异。tomcat启动会打印一个日志:catalina.yyyy-MM-dd.log
,即会生成一个带日期的日志文件,然后查看启动耗时,花了1790967ms,折合分钟是29.84945min。
这个时间肯定是不正常的,我本地调试环境一般启动耗时是1分钟左右,虽然部署到Linux上一个tomcat启动了多个应用,不过也不应该这么慢。
后来我把linux上的tomcat下载到本地,除了硬件不一样,其他都一样,然后启动耗时7分钟。
这么看,问题是出在了linux服务器上,其他的组件都是一样的,排除其他组件的问题。
然后重启linux上的进程,在本地使用jmx连接,查看启动耗时,如下图
看右上角的CPU总时间,localhost-startStop-1花了16min,点开线程看,耗时如下:
基本上是Spring Bean的加载耗时,这个也看不出啥,不过排查启动问题的时候可以查看jmx看一下。
然后回到服务器本身,使用top命令查看cpu负载:
这台机器是16核的,可是查看load average,基本上稳定在40,平均每核2.5左右,根据经验,平均每核的负载最好不要超过1,现在负载已经很高了。
然后用户占用CPU,基本稳定在96%,再看下面CPU利用率,即%CPU这一栏,并不高,所以现在问题就有点诡异。
这台机器是一个docker容器,容器数据不对,可能是宿主机出问题了,查看宿主机的CPU负载,使用top命令查看:可以看到宿主机的负载也是40,下面有1个进程CPU占用1100%,基本占了11个核,问题就出在这里了。容器是用的宿主机的硬件资源,所以查到的信息和宿主机的保持一致。
问题到这里也就清楚了,是宿主机CPU被占满,导致tomcat启动的时候分配不到CPU,启动能耗时半小时。
再来回顾一下排查过程,首先是tomcat启动耗时30分钟这个现象。
先是使用jmx观察tomcat启动耗时,只看出来时间花在哪了,但是并没有看出问题在哪。
排查启动线程耗时无果,于是在本地模拟和linux上一样的环境,观察启动耗时,在本地环境启动只花了7分钟。问题可以确认出在服务器上。
随后使用top命令观察CPU,一开始对top命令不熟悉,所以走了好多弯路,top的各项指标还是值得好好学习一下。
首先是load average,这3个值分别表示1分钟、5分钟、15分钟内系统的平均负荷,这个值单核最好不要超过1,超过1算负载很高了,需要进行排查。
然后是us,us是用户进程执行时间百分比,这个值如果长期超过50%,需要对程序进行优化。
sy是内核系统进程执行时间百分比,这个值也不宜过高。
%CPU是当前程序执行占用CPU。
其实如果对top命令的参数熟悉的话,可以很快的看出来CPU的负载长期处于飙高的状态,不仅load average高,us也高,然后就可以快速定位到问题了。
另外涉及到docker的话,如果出现负载高,但是%CPU列值不高的情况,可以去查看一下宿主机的状态。本次就是宿主机有1个进程把CPU资源占的差不多了。
linux 查看tomcat启动_一次tomcat启动特别慢的排查相关推荐
- tomcat 优化_浅谈Tomcat服务器优化方法
对于JavaWeb开发人员而言,Tomcat已成为默认的web服务器,但是在生产环境下使用Tomcat部署应用,我们如果采用Tomcat默认的配置,尤其是内存和线程的配置,其配置都很低,容易成为性能瓶 ...
- linux查看usb硬件_使用USB记忆棒测试Linux硬件兼容性
linux查看usb硬件 像其他所有人一样,我们中使用Linux的人有时需要购买新计算机. 尽管硬件兼容性差的日子早已过去,但仍然有可能遇到问题. 仅仅去本地商店,例如Raleigh的Intrex ...
- linux查看cpu核数_我们常说的CPU核数指的是什么?
前言: 在谈到服务器的性能指标时,我们常提到CPU是双核.四核.八核等,按照我们的理解,肯定是核数越高性能越好,但到底怎么理解CPU的核数那? 1.CPU的核数的概念 通俗意义上讲,CPU单核就是一个 ...
- centos7无盘启动_从无盘启动看Linux启动原理
作者:bobyzhang,腾讯 IEG 运营开发工程师 0. 故事的开始 0.1 为什么和做什么 最近家里买了对音响,我需要一个数字播放器.一凡研究后我看上了volumio( 我打算让volumio运 ...
- linux查看日历命令_在Linux中使用命令行日历和日期功能
linux查看日历命令 我一直对历史日期感兴趣,并确定事件发生在一周的实际哪一天. 独立宣言在一周的哪一天签署? 我是星期几出生的? 1876年7月4日是星期几? 我知道您可以使用搜索引擎来回答许多这 ...
- linux查看处理器型号_如何在Linux上查看处理器型号/速度
linux查看处理器型号 If you rely on somebody else for managed hosting of your Linux servers, you might not a ...
- win7查看tomcat端口_想研究Tomcat性能调优,看这篇就够了
一.下载地址 https://tomcat.apache.org/download-80.cgi 二.安装步骤 将安装包 apache-tomcat-8.5.39.tar.gz 上传至服务器 /usr ...
- linux 查看jvm虚拟内存_看完你还敢说你懂JVM吗?
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m.从表面上,物理内存应该 ...
- linux 查看ntp版本号_如何让Linux时间与internet时间同步(CentOS)?
在使用linux时(虚拟机),经常会发现使用一段时间后,linux时间和我的宿主机(真实机)的时间不一致,而宿主机的时间确实是internet时间,安装linux时选择的时区也是Asia/Shangh ...
- linux 查看内存用量_正确计算linux系统内存使用率
图中的例子很典型,就是:多数的linux系统在free命令后会发现free(剩余)的内存很少,而自己又没有开过多的程序或服务. 对于上述的情况,正确的解释是: linux的内存管理机制与windows ...
最新文章
- java jar 打印_Java 打印流 及 commons-io.jar包方法
- 停用一些不必要的Windows服务
- 禁用Grid上的自动排序功能
- java是什么 需要学什么_Java是什么,Java需要学习哪些内容?如何自学Java?
- 超详细的CentOS7中安装Git,yum安装和自己编译安装
- django_rest_framework之GenericAPIView(一)源码讲解
- ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】
- vmware windows linux udp通信,windows 下 udp socket
- AcWing 1813. 方块游戏(暴力枚举)
- [技术博客]使用wx.downloadfile将图片下载到本地临时存储
- aspose.word使用简单方法
- C# Asp.net 制作一个windows服务
- tomcat 改端口 运维最最重要的就是有看日志的习惯
- shell 封装方法_反弹shell逃逸基于execve的命令监控(上)
- 大数据初学者的福利——Hadoop快速入门教程
- 2022年 接口测试高频面试题及答案
- 基于libGPE读写KML文件的研究
- 来了来了,2020 首场 Meetup ,可!
- jsp页面打开为空白页
- 数据挖掘——无量纲化
热门文章
- 机器视觉技术概述-技术难点-市场前景
- 怎样看pytorch源码最有效?
- 「学术放养」和「认真负责」并不冲突,芝大CS博士谈从导师身上学到的几件事...
- 基于RGB图像的机器人抓取算法汇总
- 利用MATLAB仿真最小发射功率下WSN的连通性和覆盖率
- 用PLSQL将Excel数据导入到Oracle中
- python 验证码
- 查看Linux是Redhat 还是centos 还是...
- c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .
- Sequence operation3397