一个netty tcp长连接的项目中用到的启动脚本(脚本非原创,网上拷贝来拷贝去的,已不知出处),以及jvm一些参数的设置,记录下来以后应该还用得到
#!/bin/bash # JDK所在路径 JAVA_HOME="/opt/java" # 需要启动的Java主程序(main方法类) APP_MAINCLASS="XXX" # 拼凑完整的classpath参数,包括指定lib目录下所有的jar CLASSPATH="." for i in ../lib/*.jar; do CLASSPATH="$CLASSPATH":"$i" done # java虚拟机启动参数 # ======================================================================= # -XX:+<option> 开启option参数 # -XX:-<option> 关闭option参数 # -XX:<option>=<value> 将option参数的值设置为value # ======================================================================= # -Duser.timezone=GMT+08 | 东八区 # -Xms6144m -Xmx6144m | 堆内存设置为6G,并禁止扩展 # -Xmn1536m | 堆内存(6G)中的1.5G分配给新生代,新生代太大会影响gc停顿时间,并且netty tcp长连接保存在老年代里 # -XX:PermSize=288m -XX:MaxPermSize=288m | 永久代固定为288m # 剩下的就是老年代了 (堆内存size = 新生代size + 老年代size + 永久代size) # -XX:UseConcMarkSweepGC | 使用ParNew + CMS + Serial Old的收集器组合进行内存回收。如果CMS出现Concurrent Mode Failure,则Serial Old作为后备 # -XX:+CMSClassUnloadingEnabled | 配合UseConcMarkSweepGC选项在jdk1.6中可实现对永久代(PermGen)的GC # -XX:MaxTenuringThreshold | 晋升到老年代的对象年龄,每个对象在坚持过一次Minor GC后年龄就+1 # -Xloggc:/opt/gc.log # -XX:+PrintGCDetails | 打印GC详细信息 # -XX:+PrintGCTimeStamps | 打印GC停顿时间 # -XX:+HeapDumpOnOutOfMemoryError | 在发生内存溢出异常时生成堆转储快照 # -XX:HeapDumpPath=/opt/dump/ | 生成堆转储快照的目录 JAVA_OPTS="-Duser.timezone=GMT+08 -Xms6144m -Xmx6144m -Xmn1536m -XX:PermSize=288m -XX:MaxPermSize=288m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxTenuringThreshold=15 -Xloggc:/opt/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/dump/" # 初始化psid变量(全局) psid=0 ################################### # (函数)判断程序是否已启动 # # 说明: # 使用JDK自带的JPS命令及grep命令组合,准确查找pid # jps 加 l 参数,表示显示java的完整包路径 # 使用awk,分割出pid ($1部分),及Java程序名称($2部分) ################################### checkpid() { javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS` if [ -n "$javaps" ]; then psid=`echo $javaps | awk '{print $1}'` else psid=0 fi } ################################### # (函数)启动程序 # # 说明: # 1.首先调用checkpid函数,刷新$psid全局变量 # 2.如果程序已经启动($psid不等于0),则提示程序已启动 # 3.如果程序没有被启动,则执行启动命令行 # 4.启动命令执行后,再次调用checkpid函数 # 5.如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed] # 注意:echo -n 表示打印字符后,不换行 # 注意:"nohup 某命令 >/dev/null 2>&1 &" 的用法 ################################### start() { checkpid if [ $psid -ne 0 ]; then echo "================================" echo "warn: $APP_MAINCLASS already started! (pid=$psid)" echo "================================" else echo -n "Starting $APP_MAINCLASS ..." #log.log要新建,用于存储日志文件 nohup java $JAVA_OPTS -classpath $CLASSPATH "com.futurefleet.framework.bootstrap.main" > /data/software/log.log checkpid if [ $psid -ne 0 ]; then echo "(pid=$psid) [OK]" else echo "[Failed]" fi fi } ################################### #(函数)停止程序 # #说明: # 1.首先调用checkpid函数,刷新$psid全局变量 # 2.如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行 # 3.使用kill -9 pid命令进行强制杀死进程 # 4.执行kill命令行紧接其后,马上查看上一句命令的返回值: $? # 5.如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed] # 6.为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。 #注意:echo -n 表示打印字符后,不换行 #注意:在shell编程中,"$?" 表示上一句命令或者一个函数的返回值 ################################### stop() { checkpid if [ $psid -ne 0 ]; then echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) " kill -9 $psid if [ $? -eq 0 ]; then echo "[OK]" else echo "[Failed]" fi checkpid if [ $psid -ne 0 ]; then stop fi else echo "================================" echo "warn: $APP_MAINCLASS is not running" echo "================================" fi } ################################### #(函数)堆转储快照 # #说明: # 1.首先调用checkpid函数,刷新$psid全局变量 # 2.如果程序已经启动($psid不等于0),则开始执行jmap,否则,提示程序未运行 #注意:echo -n 表示打印字符后,不换行 #注意:在shell编程中,"$?" 表示上一句命令或者一个函数的返回值 ################################### dump() { checkpid if [ $psid -ne 0 ]; then echo -n "Dumping $APP_MAINCLASS ...(pid=$psid) " jmap -dump:live,format=b,file=heep.bin $psid else echo "================================" echo "warn: $APP_MAINCLASS is not running" echo "================================" fi } ################################### #读取脚本的第一个参数($1),进行判断 ################################### case $1 in start) echo "start project......" start ;; stop) echo "stop project......" stop ;; restart) echo "restart project......" stop start ;; dump) echo "dump project......" dump ;; *) esac exit 0
相关推荐
当涉及到启动Java应用程序时,shell脚本可以提供一个方便、可重复且灵活的方法。下面我们将深入探讨如何使用shell脚本来启动Java程序以及相关的知识点。 首先,我们需要了解Java程序的运行方式。Java应用程序通常由...
详细的linux shell脚本启动java代码类。
前言:打包好的springboot项目,可以使用java -jar xxx.jar的方式启动。当出现多个springboot项目需要启动的时候,可以使用脚本启动的方式。这在springcloud项目的开发测试阶段尤为有用。以下展示启动脚本示例,过程...
自启动脚本主要目的是在Linux系统启动时自动启动Java服务,确保服务的高可用性。创建自启动脚本通常包括以下步骤: 1. 创建shell脚本:在系统的`/etc/init.d/`目录下创建一个名为`myjavaservice`的shell脚本,例如...
下面将详细介绍如何使用shell脚本(适用于Unix/Linux系统)和bat脚本(适用于Windows系统)来运行Java程序。 **shell脚本运行Java程序** 在Unix/Linux环境中,我们可以创建一个.sh文件作为shell脚本来执行Java程序...
Java编程语言具有跨平台的能力,这使得它在各种操作系统上都能运行。在Windows和Linux环境中,启动批处理脚本(bat)...通过这种方式,开发者可以在Java程序中灵活地调用操作系统级别的功能,实现更复杂的自动化流程。
linux中java项目需要重启一般使用先找到进程杀掉进程,然后找到项目启动,整个过程不算复杂,但是每次都操作一遍太麻烦,我这里把这个过程整理成shell脚本,大家可以修改里面项目名称,每次直接执行这个命令重启项目...
当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要知道运行中的子shell的PID。这个PID...
在开发过程中经常会员到在Linux环境中使用Shell脚本启动和停止java程序的情况,常用的java -jar命令只能运行jar文件,有很多不方便的地方,一旦代码修改就需要重新编辑打包,其实还有很多其他的方式,这个资源中包含...
这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...
linux下启动Java程序和杀死java进程shell脚本
centos系统springboot启动、重启、停止shell脚本,centos系统springboot启动、重启、停止shell脚本
首先,Java通过Runtime类或ProcessBuilder类可以执行外部程序,包括Shell脚本。`Runtime.getRuntime().exec()`方法是较早期的调用方式,而`ProcessBuilder`则是在Java 5之后引入的,提供更灵活的进程控制。 1. **...
在本场景中,我们有两个文件——`startup.sh`和`shutdown.sh`,它们是用于启动和停止Spring Boot应用的Shell脚本,其中还涉及到内存配置。 首先,让我们深入理解`startup.sh`脚本。这个脚本的主要目标是启动一个...
创建一个启动Java服务的Shell脚本,我们通常会遵循以下步骤: 1. **定义变量**:首先,我们需要定义一些关键的环境变量,如JAVA_HOME(Java安装路径),JAR_FILE(Java应用程序的jar文件名),和WORK_DIR(工作目录...
本主题聚焦于使用Java来操作Linux服务器,特别是通过执行shell脚本来获取服务器的反馈数据。以下将详细阐述这个过程涉及的技术点和步骤。 首先,我们需要理解Java中的SSH(Secure Shell)框架,它允许我们在安全的...
Shell脚本定时监控tomcat,服务挂掉自动重启
shell启动jar程序的脚本,可以根据传入的参数"start"、"stop"、"restart"启动当前目录下的jar程序。
在实际开发过程中,经常会遇到需要结合Java程序与Shell脚本进行操作的情况。通过Java调用Shell脚本不仅可以实现复杂的功能,还可以提高程序的灵活性和扩展性。本文将详细介绍如何在Java中调用Shell脚本,并给出一个...
linux shell脚本启动java。 ---------------------------------------- Windows编辑的sh,在linux会报错: shell unexpected end of file 解决办法: vim test.sh :set fileformat=unix :wq ----------------------...