社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
最近上线的项目凌晨出现了下图异常
因为以前从没碰到过这种情况,首先怀疑是hikari链接池配置问题。最后配置修改如下:
spring.datasource.dynamic.datasource.master.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.dynamic.datasource.master.hikari.min-idle=5
spring.datasource.dynamic.datasource.master.hikari.max-pool-size=10
spring.datasource.dynamic.datasource.master.hikari.is-auto-commit=true
# 我的Hikari之前的配置问题是 idleTimeout+1秒>maxLifetime 会导致idleTimeout=0
spring.datasource.dynamic.datasource.master.hikari.idle-timeout=60000
spring.datasource.dynamic.datasource.master.hikari.pool-name=MasterHikariCP
spring.datasource.dynamic.datasource.master.hikari.max-lifetime=200000
spring.datasource.dynamic.datasource.master.hikari.initialization-fail-timeout=1000
但还是发现问题存在。下一步排查MySQL配置 show variables like '%timeout%';
什么鬼? 这玩意配置才900。。 这时我马上机灵的去修改MySQL配置。修改完之后重启查看正常了。(箭头指的两个地方都要在my.cnf
中修改才能生效哦)
但第二天还是反应接口速度慢。这时候我找到了Arthas
对线上项目进行监测,发现堆内存才分配了1G。。Oh my god !
垃圾回收次数gc.ps—scavenge.coun七、 垃圾回收消耗时间 gc.ps_scavenge.time、 标记-清除算法的次数gc.ps marksweep.count、 标记-清除算法的消耗时间gc.ps_marksweep.time。
下面是修改后的启动脚本。
#!/bin/bash
#这里可替换为jar包名字
APP_NAME=szsti-word.jar
#根据实际情况修改参数
JVM="-server -Xms5g -Xmx5g -Xss256k -XX:+UseG1GC -XX:ParallelGCThreads=8 -XX:+PrintGCDetails -Xloggc:/www/server/word/GC/wordGc.log
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/www/server/word/GC/wordHead.log"
#APPFILE_PATH="-Dspring.config.location=/usr/local/config/application.properties"
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status|log|backup]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
#nohup java $JVM -jar $APPFILE_PATH $APP_NAME > /dev/null 2>&1
#后台启动jar包,且控制环境变量,根据实际情况修改吧。
nohup java $JVM -jar $APP_NAME 2>&1 &
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#日志
log(){
# 输出实时日志
tail -n 100 -f /www/server/word/fdc-server.log
}
#备份
backup(){
#根据需求自定义备份文件路径。
BACKUP_PATH=/www/server/word/bankup
#获取当前时间作为备份文件名
BACKUP_DATE=`date +"%Y%m%d(%H:%M:%S)"`
echo 'backup file ->'$BACKUP_PATH$BACKUP_DATE'.jar'
#备份当前jar包
cp -r /www/server/word/$APP_NAME $BACKUP_PATH$BACKUP_DATE'.jar'
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
"log")
log
;;
"backup")
backup
;;
*)
usage
;;
esac
持续监测中。。。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!