事件的起因是有一次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启动特别慢的排查相关推荐

  1. tomcat 优化_浅谈Tomcat服务器优化方法

    对于JavaWeb开发人员而言,Tomcat已成为默认的web服务器,但是在生产环境下使用Tomcat部署应用,我们如果采用Tomcat默认的配置,尤其是内存和线程的配置,其配置都很低,容易成为性能瓶 ...

  2. linux查看usb硬件_使用USB记忆棒测试Linux硬件兼容性

    linux查看usb硬件 像其他所有人一样,我们中使用Linux的人有时需要购买新计算机. 尽管硬件兼容性差的日子早已过去,但仍然有可能遇到问题. 仅仅去本地商店,例如Rale​​igh的Intrex ...

  3. linux查看cpu核数_我们常说的CPU核数指的是什么?

    前言: 在谈到服务器的性能指标时,我们常提到CPU是双核.四核.八核等,按照我们的理解,肯定是核数越高性能越好,但到底怎么理解CPU的核数那? 1.CPU的核数的概念 通俗意义上讲,CPU单核就是一个 ...

  4. centos7无盘启动_从无盘启动看Linux启动原理

    作者:bobyzhang,腾讯 IEG 运营开发工程师 0. 故事的开始 0.1 为什么和做什么 最近家里买了对音响,我需要一个数字播放器.一凡研究后我看上了volumio( 我打算让volumio运 ...

  5. linux查看日历命令_在Linux中使用命令行日历和日期功能

    linux查看日历命令 我一直对历史日期感兴趣,并确定事件发生在一周的实际哪一天. 独立宣言在一周的哪一天签署? 我是星期几出生的? 1876年7月4日是星期几? 我知道您可以使用搜索引擎来回答许多这 ...

  6. linux查看处理器型号_如何在Linux上查看处理器型号/速度

    linux查看处理器型号 If you rely on somebody else for managed hosting of your Linux servers, you might not a ...

  7. win7查看tomcat端口_想研究Tomcat性能调优,看这篇就够了

    一.下载地址 https://tomcat.apache.org/download-80.cgi 二.安装步骤 将安装包 apache-tomcat-8.5.39.tar.gz 上传至服务器 /usr ...

  8. linux 查看jvm虚拟内存_看完你还敢说你懂JVM吗?

    在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m.从表面上,物理内存应该 ...

  9. linux 查看ntp版本号_如何让Linux时间与internet时间同步(CentOS)?

    在使用linux时(虚拟机),经常会发现使用一段时间后,linux时间和我的宿主机(真实机)的时间不一致,而宿主机的时间确实是internet时间,安装linux时选择的时区也是Asia/Shangh ...

  10. linux 查看内存用量_正确计算linux系统内存使用率

    图中的例子很典型,就是:多数的linux系统在free命令后会发现free(剩余)的内存很少,而自己又没有开过多的程序或服务. 对于上述的情况,正确的解释是: linux的内存管理机制与windows ...

最新文章

  1. java jar 打印_Java 打印流 及 commons-io.jar包方法
  2. 停用一些不必要的Windows服务
  3. 禁用Grid上的自动排序功能
  4. java是什么 需要学什么_Java是什么,Java需要学习哪些内容?如何自学Java?
  5. 超详细的CentOS7中安装Git,yum安装和自己编译安装
  6. django_rest_framework之GenericAPIView(一)源码讲解
  7. ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】
  8. vmware windows linux udp通信,windows 下 udp socket
  9. AcWing 1813. 方块游戏(暴力枚举)
  10. [技术博客]使用wx.downloadfile将图片下载到本地临时存储
  11. aspose.word使用简单方法
  12. C# Asp.net 制作一个windows服务
  13. tomcat 改端口 运维最最重要的就是有看日志的习惯
  14. shell 封装方法_反弹shell逃逸基于execve的命令监控(上)
  15. 大数据初学者的福利——Hadoop快速入门教程
  16. 2022年 接口测试高频面试题及答案
  17. 基于libGPE读写KML文件的研究
  18. 来了来了,2020 首场 Meetup ,可!
  19. jsp页面打开为空白页
  20. 数据挖掘——无量纲化

热门文章

  1. 机器视觉技术概述-技术难点-市场前景
  2. 怎样看pytorch源码最有效?
  3. 「学术放养」和「认真负责」并不冲突,芝大CS博士谈从导师身上学到的几件事...
  4. 基于RGB图像的机器人抓取算法汇总
  5. 利用MATLAB仿真最小发射功率下WSN的连通性和覆盖率
  6. 用PLSQL将Excel数据导入到Oracle中
  7. python 验证码
  8. 查看Linux是Redhat 还是centos 还是...
  9. c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .
  10. Sequence operation3397