#!/bin/bash

#链接文件
source /etc/profile #java虚拟机启动参数
#通过http://xxfox.perfma.com/jvm/check来检查参数的合理性
#各参数详解:http://calvin1978.blogcn.com/?p=1602
JAVA_OPTS="-server @run.memory@"
#使用CMS GC算法
JAVA_OPTS="$JAVA_OPTS -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+PrintFlagsFinal"
#启动时预申请内存
JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch"
#Eden区与2个Survivor区总和的大小比值,8:1:1
JAVA_OPTS="$JAVA_OPTS -XX:SurvivorRatio=8"
#老年代内存占用达到70%触发CMS,这个比例有计算公式
JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70"
#在CMS初始标记阶段、重新标记阶段启用并发标记
JAVA_OPTS="$JAVA_OPTS -XX:+ParallelRefProcEnabled -XX:+CMSParallelInitialMarkEnabled -XX:-CMSParallelRemarkEnabled"
#在CMS重新标记阶段之前执行一次Young GC,减少GC Root扫描开销
JAVA_OPTS="$JAVA_OPTS -XX:+CMSScavengeBeforeRemark"
#减少对象在新生代停留时间,加快YGC速度
JAVA_OPTS="$JAVA_OPTS -XX:MaxTenuringThreshold=5"
#在FULL GC的时候执行堆压缩
JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0"
# System.gc() 使用CMS算法
JAVA_OPTS="$JAVA_OPTS -XX:+ExplicitGCInvokesConcurrent"
#在OOM时转储堆内存
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/@project.build.finalName@/"
#应用崩溃时生成一个error文件
JAVA_OPTS="$JAVA_OPTS -XX:ErrorFile==/data/logs/@project.build.finalName@/hs_err_%p.error"
#打印详细GC数据
JAVA_OPTS="$JAVA_OPTS -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -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 启动脚本优化 3的更多相关文章

  1. java 8 启动脚本优化 2

    #!/bin/bash #链接文件 source /etc/profile #java虚拟机启动参数 #通过http://xxfox.perfma.com/jvm/check来检查参数的合理性 JAV ...

  2. java 8 启动脚本优化

    1 #!/bin/bash 2 3 JAVA_HOME=/usr/java/default 4 5 #java虚拟机启动参数 6 JAVA_OPTS="-server -Xms1366m - ...

  3. 不错的linux下通用的java程序启动脚本

    不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...

  4. 不错的linux下通用的java程序启动脚本(转载)

    转自:http://www.cnblogs.com/langtianya/p/4164151.html 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包 ...

  5. 【转】不错的linux下通用的java程序启动脚本

    虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用 ...

  6. shell java应用启动脚本(app.sh)

    #!/bin/sh # java服务中需要的jar文件或classpath路径,如业务程序.第三方jar文件log4j等 ShellAbsPath=$(cd "$(dirname " ...

  7. java程序启动脚本

    #!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] then echo "Please check that this script ...

  8. java后台服务器启动脚本

    最近由于经常在项目上线或者调试中启动服务,由于要设置环境变量这些,所以为了方便写了个启动脚本,希望能够帮助大家,也算是给自己做个小笔记: example_project_start.sh: # /bi ...

  9. linux下启动和终止JAVA程序shell脚本

    1.启动脚本start.sh #run application backgroud nohup java -jar chess-admin->& & #record the pr ...

随机推荐

  1. Spring扩展点-v5.3.9

    Spring 扩展点 **本人博客网站 **IT小神 www.itxiaoshen.com 官网地址****:https://spring.io/projects/spring-framework T ...

  2. P7091 数上的树

    题目传送门. 首先将 \(n\) 分解质因数,用 DFS 求出 \(n\) 的所有因数,记为 \(d_1,d_2,\cdots,d_c\),跑一遍反素数那题的代码可知 \(c\leq 23327\)( ...

  3. IOI 2020 国家集训队作业

    \(\checkmark\) 试题一 完成情况 试题二 完成情况 试题三 完成情况 cf549E cf674G arc103_f \(\checkmark\) cf594E agc034_f agc0 ...

  4. python的包与模块

    win +R d

  5. Excel-统一小括号格式(中文小括号,英文小括号)

    1.统一小括号格式(中文小括号,英文小括号) 公式=ASC("(") #"(" 解释函数: ASC(A1)#对于双字节字符集(DBCS)语言,将全角英文字符(即 ...

  6. ansible-playbook 编译安装nginx

    mkdir /etc/ansible/roles/nginx/{files,templates,tasks,handlers,vars,default,meta} -pv └── nginx ├── ...

  7. Java 读取TXT文件的多种方式

    1).按行读取TXT文件package zc;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFound ...

  8. 09 eclipse配置maven环境

    eclipse配置maven环境 一.打开eclipse:Window>>Preferences: 二.搜索:"maven",然后点击:"Installati ...

  9. LeetCode一维数组的动态和

    一维数组的动态和 题目描述 给你一个数组 nums.数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]...nums[i]). 请返回 nums 的动态和. 示例 1: ...

  10. act

    act的词源是do, 干着或干了的事情也可以叫act.抄全字典的话,抄的和看的都麻烦,在阅读中体会吧. act和action有啥区别?action: doing sth; act: n. action ...