资讯专栏INFORMATION COLUMN

tomcat的安装和自动化thread线程快照

IT那活儿 / 3383人阅读
tomcat的安装和自动化thread线程快照

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

某项目现场,经常出现CPU高的时候,这种情况发现了多次,通常是代码存在一些问题,导致CPU高,经常人工去恢复,有时又未做线程快照,无法定位到具体的问题。于是想写一个小脚本,自动去获取,下面是本次的一点尝试。



Tomcat的简介


Tomcat服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Xx通信企业使用较普遍的版本为Tomcat8的大版本。由于开源软件的漏洞比较多,建议厂商在安装Tomcat服务器时,建议安装所需大版本最新小版本。
各个版本的Tomcat在Linux,window操作系统的安装过程大致相似。
下面以在linux 的Tomcat8.5.72为例,详细描述Tomcat的安装过程。该安装文档适用于各个版本的Tomcat安装。



最小化安装要求


安装要求:安装tomcat遵循最小化安装原则,安装最小化组件,开启最小化端口,关闭非必须服务。
  • Server(代表tomcat instance(实例),即表现出的一个jvm进程;监听在8005端口,只接收“SHUTDOWN”。各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口;)
  • Service(用于实现将一个或多个connector组件关联至一个engine组件;)
  • Connector(接入前端用户请求;)
  • Engine(Servlet实例,即servlet引擎,其内部可以有一个或多个host组件来定义站点;通常需要通过defaultHost来定义默认的虚拟主机;)
  • Host(位于engine内部用于接收请求并进行相应处理的主机或虚拟主机;)
  • Context(Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中一个Web应用程序;)
  • Value(Value组件类似于过滤器,它可以工作于Engine和Host/Context之间、Host和Context之间以及Context和Web应用程序的某资源之间。一个容器可以建多个Value,而且Value定义的次序也决定了他们生效的次序。)
  • Realm(一个Realm表示一个安全上下文,它是一个授权访问某个给定Context的用户列表和某用户所允许。)



JDK环境安装



  • Tar –zxvf jdk-8u281-linux-x64.tar.gz

  • java -version

  • export JAVA_HOME=/app/jdk1.8.0_281

  • export JRE_HOME=$JAVA_HOME/jre

  • export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib

  • export PATH=$JAVA_HOME/bin:$PATH



TOMCAT环境安装


1. Tomcat安装及启动
Tar –xvf *tar.gz
sh /app/tomcat/apache-tomcat-8.5.72/bin/startup.sh
2. Tomcat访问
http://192.168.1.111:8080/



自动化线程快照


1. 实现逻辑

当主机CPU大于80%时,由于一个主机存大多个JAVA进程,按进程CPU大小,大于某个阈值时调用jstack程序生成快照,同时上传至FTP,使用MT工具分析DUMP

2. 实现脚本

#!/bin/bash
source /etc/profile
log_file="/tmp/dump.log"
script_name="thread_dump.sh"
datee=$(date +"%Y-%m-%d-%H:%M:%S")
#######DECALRE
pro_cpu_rate=10.0
ipaddr=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk {print $2}|tr -d "addr:"|grep "^1XXXX"|head -n 1)
###########################
ps axf -o "pid %cpu command"|grep java|grep -v grep > /tmp/thread_${ipaddr}_${datee}_ddl
#################################
which  jstack
if [ $? -eq 0 ] ;then

function pro_cpu
{
ps axf -o "pid %cpu command"|grep java|grep -v grep|awk {if($2>=$pro_cpu_rate) print $1} | while read procid
do
echo $procid
done
}

function log_echo
{
typeset log_message=$1
typeset log_date=$(date +"%Y-%m-%d %H:%M:%S")
echo "[${log_date}] [${script_name}] ${log_message}" >> $log_file
}

log_echo "start jstack thread"


for i in `pro_cpu`
do
log_echo "process num $i start"
jstack $i > /tmp/thread_${ipaddr}_${datee}_$i
log_echo "process num $i end"
sleep 5
done

function file_upload
{
ftp -n <open XXXX
user XXXX
binary
lcd /tmp
cd thread_snapshot
prompt
mput thread*
close
bye
EOF
}

function file_delete
{
cd /tmp && rm -rf thread*
}

file_upload
file_delete
cat $log_file

else
echo 0
exit;
fi





本文作者:唐田寿

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129624.html

相关文章

  • JVM调优前戏之JDK命令行工具---jstack

    摘要:用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的就是定位线程出现长时间停顿的原因,如线程死锁死循环请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。 在JDK的命令行中,一般开发人员最耳熟能详的肯定就是java,javac,javap等常用命令,不过在jdk/bin下还有许多其他的命令行工具,它们被用来监...

    Cristic 评论0 收藏0
  • jvm调优-命令篇

    摘要:打印等待回收对象的信息可以看到当前队列中并没有等待线程执行方法的对象。一般情况,会到客户端用工具来分析用于生成虚拟机当前时刻的线程快照。 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使...

    Lsnsh 评论0 收藏0
  • 自动记录MySQL慢查询快照脚本

    摘要:完成的一个小程序,用于杀掉上的异常线程,如慢查询处于状态的。在这里出现的实例都会被执行检查,可用注释,但需要重启脚本。检查用公共配置,实时生效。为表示脚本不进行任何检查,只简单维护与数据库的连接存活。试运行模式可用于监控慢查询并告警。 Python完成的一个小程序,用于杀掉 MySQL 上的异常线程,如慢查询、处于Sleep状态的。项目地址:https://github.com/sea...

    alphahans 评论0 收藏0
  • java虚拟机故障处理工具

    摘要:这些工具包括名称主要作用显示指定系统内所有的虚拟机进程。虚拟机堆转存快照分析工具命令用于与搭配使用,用来分析生成的文件。命令格式命令样例线程堆栈跟踪工具用于生成虚拟机当前时刻的线程快照。 概述 给系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。 java开发人员可以在jdk安装的bin目录下找到除了java,javac以外的其他命令。这些命令主要是一...

    loonggg 评论0 收藏0
  • 摘记《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》

    摘要:第章内存区域与内存溢出异常运行时数据区域虚拟机在执行程序的过程中会把它所管理的内存划分为若干个不同的数据区域。即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。 第2章 Java内存区域与内存溢出异常 2.2 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规范(Java SE 7版)...

    zoomdong 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<