「这是我参与2022首次更文挑战的第39天,活动详情查看:2022首次更文挑战」
本文项目代码gitee地址:gitee.com/wei_rong_xjvm原理i…
本篇文章,我们来研究下如何将你的项目打包,通过启动脚本,直接启动执行的方式。相信无论是你在使用nacos,使用skywalking等等一系列的组件时,都是通过脚java编译器本直接启动的,java模拟器无需在启动时候,手动敲命令,指定jvm参数等。当然了,我们自己的项目,也想要有这样的效果。对于运维人员来讲,部署时能够提供极大地便利。
一、开始搭建
下面我将详细展示每个步骤,以工程rob-necehttp 302ssities-gateway
为例jvm性能调优。
1.1 准备package.xml
package.xml是干什么用的呢?
-
它指定了我们最终打包的格式,通常是
zip
。 -
将变量值项目必要文件windows10打包进zip包中。
- readme.md等等的说java环境变量配置明性文件
- *.bat、 *.sh 等启动脚本
- jar包
完整的package.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>bin</id>
<!-- 最终打包成一个用于发布的zip文件 -->
<formats>
<format>zip</format>
</formats>
<fileSets>
<!-- 把项目相关的说明文件,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>${file.separator}</outputDirectory>
<includes>
<include>README*</include>
<include>CHANGELOG*</include>
<include>LICENSE*</include>
<include>NOTICE*</include>
</includes>
</fileSet>
<!-- 把项目目录中的windows环境启动脚本文件,打包进zip文件的根目录 -->
<fileSet>
<directory>./src/main/resources/package</directory>
<outputDirectory>${file.separator}</outputDirectory>
<lineEnding>windows</lineEnding>
<includes>
<include>*.bat</include>
</includes>
</fileSet>
<!-- 把项目目录中的linux环境启动脚本文件,打包进zip文件的根目录 -->
<fileSet>
<directory>./src/main/resources/package</directory>
<outputDirectory>${file.separator}</outputDirectory>
<lineEnding>unix</lineEnding>
<fileMode>0755</fileMode>
<includes>
<include>*.sh</include>
</includes>
</fileSet>
<!-- 把项目工程本身的jar文件,打包进zip文件的lib目录 -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>${file.separator}lib</outputDirectory>
<includes>
<include>${project.artifactId}-${project.version}.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
我们创建变量的定义一个packagejvm性能调优
文件夹,用来存在打包相关的文件信息,package.xml也放在其中javaee。
1.2 编写start.sh脚本
因为我绝大多数部署在linux服务器,所以本文变量英文只提供.sh
脚jvm原理本,需要windows的http 302.bat
文件,请自行搜索吧。
start.sh做了什么?
- 获取java环境变量
- 指定了jvm参java环境变量配置数
- 组装启动命令
- 执行组装好的命令
完整的start.sh如下所示:
#!/bin/bash
error_exit ()
{
echo "ERROR: $1 !!"
exit 1
}
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
if [ -z "$JAVA_HOME" ]; then
if $darwin; then
if [ -x '/usr/libexec/java_home' ] ; then
export JAVA_HOME=`/usr/libexec/java_home`
elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then
export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
fi
else
JAVA_PATH=`dirname $(readlink -f $(which javac))`
if [ "x$JAVA_PATH" != "x" ]; then
export JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null`
fi
fi
if [ -z "$JAVA_HOME" ]; then
error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"
fi
fi
export SERVER="rob-necessities-gateway"
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=`cd $(dirname $0)/..; pwd`/${SERVER}
#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')
if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then
JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/gc.log:time,tags:filecount=10,filesize=102400"
else
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
fi
JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/lib/${SERVER}.jar"
JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288"
echo "$JAVA ${JAVA_OPT}"
# start
nohup $JAVA ${JAVA_OPT} >> /dev/null 2>&1 &
echo "server is starting"
至此为止,准备工作就基本完成了,下面我们开始处理pom.xml
文件。
1.3 编辑pom.xml
在pom文件的<build>
标签下的<pwindows无法连接到打印机lugins>jvm调优面试题;
标签当中,添加http 404如下打包插件内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptors>
<descriptor>./src/main/resources/package/package.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
二、打包验证
经过前面的准备过程,我们直接进行打包验证,直接使jvm调优面试题用命令mvn install
即可,我这里使用idea的界面来操作,选择instjava环境变量配置all:
打包后的文件,windows许可证即将过期怎么办在项目的jvm性能调优target目录下,如下图所示:
其中这个zip
文件是我们需要的,其内容如下所示是:
lib中是jar包。
三、部署验证
3.1 环境准java培训备
我们将zip
文件上传到服windows键是哪个务器,解压后进行启动测试,解压命令如下:
[root@hecs-402944 opt]# unzip rob-necessities-gateway-0.0.1-SNAPSHOT-bin.zip
Archive: rob-necessities-gateway-0.0.1-SNAPSHOT-bin.zip
creating: rob-necessities-gateway-0.0.1-SNAPSHOT/
creating: rob-necessities-gateway-0.0.1-SNAPSHOT/lib/
inflating: rob-necessities-gateway-0.0.1-SNAPSHOT/startup.sh
inflating: rob-necessities-gateway-0.0.1-SNAPSHOT/lib/rob-necessities-gateway-0.0.1-SNAPSHOT.jar
注意: 此处必须说明一个问题,如果你装的是oracle的jdk,那么直接启动就没有问题了,但是如果你装的是openjdk,需要注意两点:
-
opewindows10njdk安装是否正确,通常需要两步安装过程
安装jre:windows是什么意思
sudo yum install java-1.8.0-openjdk -y
安装jdk:
sudo yum install java-1.8.0-openjdk-devel -y
-
环境变量配置是够正确
vi /etc/profile
在其windows许可证即将过期怎么办中添加环境变量
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
不httpwatch知道java的路径可以使用下面的命http代理令和步骤查找:
[root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# which java /usr/bin/java [root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# ls -lrt /usr/bin/java lrwxrwxrwx 1 root root 22 2月 25 11:04 /usr/bin/java -> /etc/alternatives/java [root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# ls -lrt /etc/alternatives/java lrwxrwxrwx 1 root root 73 2月 25 11:04 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/java
其中的
/usr/lihttp 302b/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
即是安装路径。
3.2 启动
进入解压后的项目文件夹中,执行脚本命令变量4:
[root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# ./startup.sh
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/bin/java -Xms512m -Xmx512m -Xmn256m -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/lib/ext -Xloggc:/opt/rob-necessities-gateway/logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -jar /opt/rob-necessities-gateway/lib/rob-necessities-gateway.jar --server.max-http-header-size=524288
server is starting
注意,如windows更新有必要吗果发现没有任何变化,可以将输出的命令行直接执行,看看报错内http://192.168.1.1登录容,如下所示:windows更新有必要吗
[root@hecs-402944 rob-necessities-gateway-0.0.1-SNAPSHOT]# /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/bin/java -Xms512m -Xmx512m -Xmn256m -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/lib/ext -Xloggc:/opt/rob-necessities-gateway/logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -jar /opt/rob-necessities-gateway/lib/rob-necessities-gateway.jar --server.max-http-header-size=524288
Error: Unable to access jarfile /opt/rob-necessities-gateway/lib/rob-necessities-gateway.jar
报错内容是没有找到此jar包rob-necessities-gateway.jar
,原因一目了然了windows7旗舰版,我们的jar包是带有版本号的:
如何修改?
注意我们前面提到得package.xml
文件,如下所示位置:
红色框内的两部分其实分别是pom.xml的项目名和项目版本,两部分组合生成最终jar包的名称。
所以java编译器我们在startup.sh
当中的配置要和这个保持一致,即
export SERVER="rob-necessities-gateway-0.0.1-SNAPSHOT"
前面的startup.sh
之所以放错,是为了增加大家的印象,不要拿过去直接用,导致后面遇到问题不知如何下手。
经过上面全部过程,就能够成功启动了httpwatch,成功后项目文件夹会生成其日志文件:
本文到此全部结束!希望对java语言您有所帮助。
本文项目代码gitee地址:gitee.com/wei_rong_xi…