jvm服务器信息收集脚本

#!/bin/bash
############################################################################
#作者:周xx                                                               #
#日期:2020-01-20                                                           #
#用途:该脚本旨在帮助快速收集java程序相关堆栈信息,快速恢复业务。                    #
#版权:本工具版权信息归作者所有,未经授权不可用于平台外的其它商业用途。  #                         #
############################################################################ 
#
# Input variables:
#   无:不用传参
# Output variables:
#    JVM_LOG_PATH: jvm快照日志本地路径
#加载脚本执行环境变量
source /etc/profile
source ~/.bash_profile
#全局变量
LOG=/tmp/log_collect$$
CSFILE=$(basename $0).txt
#默认路径
JAVA_HOME=/opt/appl/java/jdk
if [ -d $JAVA_HOME ];then
    JAVA_HOME=/opt/appl/java/jdk
elif [ -d "/opt/appl/tomcat/jdk" ];then
    JAVA_HOME=/opt/appl/tomcat/jdk
elif [ -d "/opt/appl/apache-tomcat-8.0.45/jdk" ];then
    JAVA_HOME=/opt/appl/apache-tomcat-8.0.45/jdk
fi
#以下为方法功能函数
showusage() {
        echo "用法: sh `basename $0`"      
        exit 1
}
jvm_info() {
        time=$(date +"%Y-%m-%d %H:%M:%S")
        host=$(hostname)
        ip=$(/sbin/ip addr | egrep 'eth0|ens160' |awk 'NR==2 {print $2}'| sed 's#/24##g')
        cpu_cores=$(cat /proc/cpuinfo | grep 'processor' |wc -l)
        cpu_type=$(cat /proc/cpuinfo |egrep 'model name|cpu MHz' |head -2|awk -F: '{print $2}' | xargs -n100)MHz
        memory=`echo "scale=2;$(cat /proc/meminfo | grep 'MemTotal' | awk -F: '{print $2}' | awk '{print $1}')/1024/1024"| bc`GB
        max_openfiles=`ulimit -a | grep 'open files'| awk '{print $NF}'`
        max_user_processes=`ulimit -a | grep 'max user processes'| awk '{print $NF}'`
#打印服务器基本信息
cat > $LOG/basic.txt <<EOF
主机名:$host
ip:$ip
cpu核数:$cpu_cores
cpu型号:$cpu_type
总内存:$memory
最大openfiles:$max_openfiles
最大用户进程数:$max_user_processes
EOF
        #获取系统重要日志和重要配置
        cat  /etc/resolv.conf > $LOG/resolv.txt
        tail -2000 /var/log/messages > $LOG/messages.txt
        sysctl -a > $LOG/sysctl.txt  2>/dev/null
        df -h >  $LOG/disk.txt
        tail -2000 /var/log/secure > $LOG/secure.txt
        tail -500 /var/log/cron > $LOG/cron.txt
        top -bc -n 1 > $LOG/memory.txt
		netstat -anpe > $LOG/netstat.txt
		netstat -s > $LOG/networks.txt
		which lsof || yum -y install lsof
		lsof > $LOG/openfiles.txt
        ps -ef|grep java  |grep '/opt/appl' |grep -v grep |egrep -v logstash > $LOG/java_process.txt
        #检查
        #获取java jvm信息
        pids=`ps -ef|grep java  |grep '/opt/appl' |grep -v grep |egrep -v logstash |awk '{print $2}'`
        for pid in $pids;do
            user=`ps -ef|grep java |grep $pid | grep -v grep|awk '{print $1}'`
            su - $user <<EOF
mkdir -p $LOG/${pid}
export PATH=$JAVA_HOME/bin:$PATH
jstat -gcutil ${pid} > $LOG/${pid}/jstat_gcutil_$$.txt ;
jmap -histo:live ${pid} > $LOG/${pid}/jmap_histo_$$ ;
jmap -dump:live,file=$LOG/${pid}/jmap_dump_$$.bin ${pid};
jstack -l ${pid} > $LOG/${pid}/jstack_1_$$;
jstack -l ${pid} > $LOG/${pid}/jstack_2_$$ ;
EOF
        done
		tar_filename=log_collect_`hostname`_`date +"%Y%m%d%s"`.tar.gz
        cd /tmp && tar -czvf $tar_filename  log_collect$$ >/dev/null 2>&1
		find $LOG -not -name "memory.txt" -not -name "basic.txt" -not -name "jstat_gcutil.$$" -exec rm -f {} \; >/dev/null 2>&1
		mv ${tar_filename} $LOG
		echo "JVM_LOG_PATH${LOG}JVM_LOG_PATH"

}

#主函数,具体逻辑实现
#############################
#判断参数变量,以决定是否合法
if [ $# -gt 0 ];then
        showusage
fi

rm -fr /tmp/log_collect$$
mkdir -p $LOG
chmod 777 $LOG
#获取jvm信息
jvm_info

 

#echo "{'time':'$time','host':'','ip':'','cpu_cores':'','cpu_type':'','memory':'','max_openfiles':'','max_user_processes':'','cpu_used_percent':'','used_openfiles':'','used_memory_percent':'','disk_opt_percent':'','jvm_heapsize':'11808_1','jvm_info':'url'}"

#储存上传jvm信息

#tar_filename=log_collect_`hostname`_`date +"%Y%m%d%s"`.tar.gz

#cd /tmp && tar -czvf $tar_filename log_collect --remove-files

#curl -XPOST https://opsjvm.xxx.com/upload?token=OYFTXLUCIL3PJ5CR7ZECT7HNHM  -F "data=@/tmp/$tar_filename"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值