java 8 启动脚本优化 2
#!/bin/bash #链接文件
source /etc/profile #java虚拟机启动参数
#通过http://xxfox.perfma.com/jvm/check来检查参数的合理性
JAVA_OPTS="-server @run.memory@"
JAVA_OPTS="$JAVA_OPTS -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=5 -XX:GCTimeRatio=19 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintTenuringDistribution -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -Xloggc:/data/logs/@project.build.finalName@/gc.gclog"
JAVA_OPTS="$JAVA_OPTS -XX:-OmitStackTraceInFastThrow" #JAR包路径
APP_NAME=@project.build.finalName@.jar
#服务暂停后等待时间,默认为120秒
PAUSE_WAIT=120
#进程停止需等待多少秒
SHUTDOWN_WAIT=30 workdir=$(cd $(dirname $0); pwd) #使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
} #检查程序是否在运行
checkpid(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
if [ ! -z "${pid}" ]; then
return 0 # 0=true
fi return 1 # 1=false
} #检查程序端口是否已启动
checkport() {
if checkpid; then
port=$(netstat -ntlp | grep $pid | awk '{printf $4}' | cut -d':' -f4)
if [ ! -z "${port}" ]; then
return 0 # 0=true
else
return 1 # 1=false
fi
else
echo "${APP_NAME} is not running!"
return 1
fi
} checktcp() {
echo "start check connections, $SECONDS." if checkport; then
local count=0;
until [ `netstat -ntp | grep ESTABLISHED | awk -v port=":$port" '$4~port{print}' | wc -l` = '0' ] || [ ${count} -gt ${PAUSE_WAIT} ]
do
if [ `expr ${count} % 5` -eq 0 ]; then
echo "waiting for connections disconnect!"
fi
sleep 1
let count=$count+1;
done if [ ${count} -gt ${PAUSE_WAIT} ]; then
echo "wait for ${PAUSE_WAIT} seconds, still have connetion"
#打印所有的连接
netstat -ntp | grep ESTABLISHED | awk -v port=":$port" '$4~port{print}'
fi
fi
echo "end check connections, $SECONDS."
} #启动方法
start(){
echo "starting ..." if checkpid; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java $JAVA_OPTS -jar $workdir/$APP_NAME > /dev/null 2>&1 &
fi
} pause() {
if checkport; then
url="http://localhost:$port/actuator/pause"
echo $url local curlRtn=$(curl -s -XPOST $url | cat)
echo "service pause $curlRtn"
fi
} #停止方法
stop(){
echo "stopping ..." if checkpid; then
#停止分为3个步骤:暂停、检测tcp连接、停止进程
pause
checktcp
kill $pid local kwait=$SHUTDOWN_WAIT
local count=0;
until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
do
echo "waiting for processes to exit";
sleep 1
let count=$count+1;
done if [ $count -gt $kwait ]; then
echo "killing processes didn't stop after $SHUTDOWN_WAIT seconds"
kill -9 $pid
fi echo "${APP_NAME} stopped."
else
echo "${APP_NAME} is not running"
fi
} #输出运行状态
status(){
if checkpid; then
echo "${APP_NAME} is running. pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
} #重启
restart(){
stop
start
} #根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
"check")
checktcp
;;
*)
usage
;;
esac
java 8 启动脚本优化 2的更多相关文章
- java 8 启动脚本优化 3
#!/bin/bash #链接文件 source /etc/profile #java虚拟机启动参数 #通过http://xxfox.perfma.com/jvm/check来检查参数的合理性 #各参 ...
- java 8 启动脚本优化
1 #!/bin/bash 2 3 JAVA_HOME=/usr/java/default 4 5 #java虚拟机启动参数 6 JAVA_OPTS="-server -Xms1366m - ...
- 不错的linux下通用的java程序启动脚本
不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...
- 不错的linux下通用的java程序启动脚本(转载)
转自:http://www.cnblogs.com/langtianya/p/4164151.html 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包 ...
- 【转】不错的linux下通用的java程序启动脚本
虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用 ...
- shell java应用启动脚本(app.sh)
#!/bin/sh # java服务中需要的jar文件或classpath路径,如业务程序.第三方jar文件log4j等 ShellAbsPath=$(cd "$(dirname " ...
- java程序启动脚本
#!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] then echo "Please check that this script ...
- java后台服务器启动脚本
最近由于经常在项目上线或者调试中启动服务,由于要设置环境变量这些,所以为了方便写了个启动脚本,希望能够帮助大家,也算是给自己做个小笔记: example_project_start.sh: # /bi ...
- linux下启动和终止JAVA程序shell脚本
1.启动脚本start.sh #run application backgroud nohup java -jar chess-admin->& & #record the pr ...
随机推荐
- [ Skill ] 图形化组件在注册 User Trigger 时需要注意的事情
https://www.cnblogs.com/yeungchie/ 使用 deRegUserTriggers 可以用来配置:当打开一个新窗口时,自动集成自定义的菜单.工具栏等等. 使用格式如下: d ...
- CF1361C Johnny and Megan's Necklace
考虑\(2^x | (u \oplus v)\)的最大\(x\)小于等于\(20\) 这种题目,可以考虑搬到图上做. 我们枚举\(x\)那么对\((u\ mod\ 2^x,v\ mod\ 2^x)\) ...
- Codeforces 547E - Mike and Friends(AC 自动机+树状数组)
题面传送门 好久每做过 AC 自动机的题了--做几个题回忆一下罢 AC 自动机能够解决多串匹配问题,注意是匹配,碰到前后缀的问题那多半不在 AC 自动机能解决的范围内. 在初学 AC 自动机的时候相信 ...
- Atcoder Regular Contest 093 D - Dark Horse(组合数学+状压 dp)
Atcoder 题面传送门 & 洛谷题面传送门 常规题,简单写写罢((( 首先 \(1\) 的位置是什么不重要,我们不妨钦定 \(1\) 号选手最初就处在 \(1\) 号位置,最后答案乘个 \ ...
- RSA,DSA,ECDSA,EdDSA和Ed25519的区别
RSA,DSA,ECDSA,EdDSA和Ed25519的区别 用过ssh的朋友都知道,ssh key的类型有很多种,比如dsa.rsa. ecdsa.ed25519等,那这么多种类型,我们要如何选择呢 ...
- 【Python小试】使用列表解析式简化代码
列表解析式的好处: 代码简洁 可读性强 运行快 示例 来自<Python编程>中的一个例子:同时投掷两颗面数不同的骰子(如一个6面的D6和一个10面的D10)n次,统计两个骰子点数之和,并 ...
- 39-Remove Duplicates from Sorted Array
Remove Duplicates from Sorted Array My Submissions QuestionEditorial Solution Total Accepted: 127836 ...
- Redis篇:单线程I/O模型
关注公众号,一起交流,微信搜一搜: 潜行前行 redis 单线程 I/O 多路复用模型 纯内存访问,所有数据都在内存中,所有的运算都是内存级别的运算,内存响应时间的时间为纳秒级别.因此 redis 进 ...
- Vue3项目搭建规范
Vue3项目搭建规范 一. 代码规范 1.1 集成editorconfig配置 EditorConfig有助于为不同IDE编辑器上维护一致的编码风格 安装插件:EditorConfig for VS ...
- Yarn的Tool接口案例
目录 Yarn的Tool接口案例 Tool接口环境准备 1 新建Maven项目YarnDemo 编写代码 打包jar上传到集群 Yarn的Tool接口案例 Tool接口环境准备 之前写wordcoun ...