-
2022-04-24 21:17:36
一般情况下运行jar包,当前是可运行的jar包,直接命令
java -jar common.jar
按下ctrl+C ,关闭当前ssh或者直接关闭窗口,当前程序都会退出。
我们在命令的结尾添加 “&” ,&表示该程序可以在后台执行
java -jar common.jar &
但是在当窗口关闭时,程序也会中止运行
nohup java -jar common.jar &
命令最前面个nohub关键字,这样程序就会不挂断运行命令, 当ssh终端关闭时,程序仍然在运行,当前程序的日志会被写入到当前目录的nohup.out文件中
我们可以改下输入的日志文件
nohup java -jar common.jar > log.out &
当前程序的日志会被写入到当前目录的log.out文件中
如果不想写日志,可以将日志重定向到 /dev/null 中,/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失
nohup java -jar common.jar > /dev/null &
标准输出就会不再存在,没有任何地方能够找到输出的内容
nohup java -jar common-api.jar >/dev/null 2>log.error &
只输出错误信息到日志文件,标准输出不写入日志文件,直接丢弃
nohup java -jar common-api.jar >/dev/null 2>&1 &
标准输出(stdout)重定向到/dev/null中(丢弃标准输出),然后标准错误输出(stderror)由于重用了标准输出的描述符,所以标准错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了
nohup java -jar common-api.jar >log.out 2>&1 &
标准输出重定向到log.out中,然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了log.out中
但是不管那种情况,如果日志输出,日志文件都会增加很快,造成单个文件很大。所以需要拆分文件
1:定时作业,每天将日志文件复制一份,然后将当前的日志文件清空。
参考:https://www.csdn.net/tags/NtTagg3sNTIwNDUtYmxvZwO0O0OO0O0O.html
更多相关内容 -
SpringBoot项目运行jar包启动
2022-03-29 08:22:39SpringBoot项目在开发中,方便快捷,有一点原因就是SpringBoot项目可以打jar包运行:把jar包直接扔服务器上,然后运行jar包就能访问项目接口了。下面介绍SpringBoot项目打jar包运行的步骤流程: 一、我们所熟悉的是...人工智能,零基础入门!http://www.captainbed.net/inner
SpringBoot项目在开发中,方便快捷,有一点原因就是SpringBoot项目可以打jar包运行:把jar包直接扔服务器上,然后运行jar包就能访问项目接口了。下面介绍SpringBoot项目打jar包运行的步骤流程:
一、我们所熟悉的是在开发环境下,直接用开发工具来运行那个启动类,然后就能启动这个项目:
开发环境下启动项目
二、 SpringBoot项目打jar包方法:
【1】在cmd界面中,进入项目的本地存储地址
cmd命令下进入项目地址
【2】运行maven的打包命令,mvn clean package -Ptest -Dmaven.test.skip=true
maven打jar包命令
【3】打包成功,
maven命令打包成功
【4】在项目的“target”目录下找到这个jar包
jar包所在位置
【5】 把jar包放到服务器的特点位置,【下面以放到本地为例,就是在自己电脑上操作】
把jar包放到服务器上
【6】在cmd命令窗口下执行运行jar包的命令:java -jar E:/user-0.0.1.jar
这个语句可以启动项目,但是日志会打在控制台上,我们要收集日志,修改一下,在后面加上指定日志文件,优化后的命令如下:java -jar E:/user-0.0.1.jar > E:/user.log &
运行jar包启动项目
【7】要关闭项目就直接把窗口关闭就可以了
-
SpringBoot-Jar包启动流程
2021-04-20 20:19:16Spring Boot Jar包启动流程 启动流程概览 首先,我们通过java -jar命令启动jar包,此时调用Launcher$AppClassLoader类加载器加载,此时涉及了MANIFEST.MF中Main-Class对应的属性 然后构建Spring Boot加载器,...Spring Boot Jar包启动流程
启动流程概览
-
首先,我们通过java -jar命令启动jar包,此时调用Launcher$AppClassLoader类加载器加载,此时涉及了MANIFEST.MF中Main-Class对应的属性
-
然后构建Spring Boot加载器,通过调用LaunchedURLClassLoader类加载器加载jar包中/BOOT-INF/classes/和/BOOT-INF/lib/*.jar文件
-
基于反射调用应用程序的启动方法,此时涉及了MANIFEST.MF中的Start-Class对应的属性
Jar包结构
首先我们来看下jar包的结构:
- 其中BOOT-INF就是我们自己写的应用的Class,包括:
- classes:我们在spring boot项目中实现的业务对象
- lib:存放的就是spring boot项目中的maven依赖,就是一个个的jar包
- META-INF:
- maven:包含了基本的maven配置文件
- MANIFEST.MF:在spring boot的jar包中,这个文件是不能缺少的,否则就无法正常启动
- org.springframework.boot.loader是来自于spring-boot-loader.jar包的文件,这里为什么不把这个jar包放到lib目录下,而是将它的文件拷贝出来单独放在一个文件夹下呢?这个留待后面解答
MANIFEST.MF文件
首先我们看看文件的内容:
该文件中最重要的就是Main-Class和Start-Class这两个属性对应的启动类。
Start-Class是我们真正要启动的类,该文件存储在BOOT-INF/classes目录下。
从这里我们可以解答刚开始的那个问题:为什么将spring-boot-loader.jar文件的内容单独拷贝出来;这是因为我们在MANIFEST.MF中配置了Main-Class这个属性,那么当jar包启动的时候,就必须能够找到这个类,如果是在lib下的话,则启动时无法加载到这个类,所以这里将这些文件直接拷贝出来丢到jar包里面,让JarLuncher在启动jar包时可以直接启动。
我们来看看这个JarLauncher在哪里:
Jar中不同类对应的类加载器
spring boot加载器能直接加载BOOT-INF/*下的jar包和类吗?
jdk自己实现的协议无法加载jar包中的jar包,我们通过如下程序测试下:
@Test public void test() throws IOException, ClassNotFoundException { // 这里的地址替换为自己本地jar包的位置运行即可,spring-boot的jar包基本都会包含这个spring-beans的jar包 URL nested_url = new URL("jar:file:///D:/spring_project/myblog/target/demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/spring-beans-5.2.7.RELEASE.jar"); // 这里没有加载嵌套的jar包,只加载了我们自己打包的文件 URL url = new URL("file:///D:/spring_project/myblog/target/demo-0.0.1-SNAPSHOT.jar"); URLClassLoader loader = new URLClassLoader(new URL[]{nested_url, url}, null); Class<?> aClass = loader.loadClass("org.springframework.boot.loader.JarLauncher"); System.out.println(aClass); // 由于无法加载jar中jar所以这里会报错!具体情况请看下图 loader.loadClass("org.springframework.beans.BeanUtils"); }
那么Spring Boot到底如何解决这个问题呢?
首先,我们来看看通过URL协议我们是如何加载这些文件的。对于每种协议(包括file、ftp、http、jar等),jdk都提供了对应的Handler实现类,如图所示:
既然通过这些Handler无法读取jar里面的jar文件,那么spring boot的开发者就另辟蹊径,替换掉了读取jar的Handler。首先来看看Java中URL包含协议的请求流程:
java的URL类中,会根据协议的名称进行包名的拼接,然后选择对应的Handler,我们可以在URL源码中看到这一点:
覆盖jar中的Handler有三种方法:
- 指定URL HandlerFactory
- 修改默认匹配包名
- 采用默认包名
我们可以设置URLStreamHandlerFactory来替换Handler,但是这个URLStreamHandlerFactory只能被替换一次。
正常情况下,这是没问题的,但是我们使用tomcat启动的时候就会报错,因为tomcat已经设置过URLStreamHandlerFactory一次,所以spring boot如果再次设置的话还是会报错。但是spring boot的还是有自己的办法解决这个问题,我们看看它是如何做的。
此时我们又要回到MANIFEST.MF文件,看看这个Main-Class对应的org.springframework.boot.loader.JarLauncher的main启动方法:
最终其实我们可以发现,spring-boot通过System.getProperty方法设定了默认包名的路径!
我们可以在刚才失败的方法上面添加这个方法,看是否能成功。此时还要修改以下jar协议,要在jar的后面加上"!/",那么新的测试类如下:
@Test public void test() throws IOException, ClassNotFoundException { JarFile.registerUrlProtocolHandler(); // 加载jar中jar URL nested_url = new URL("jar:file:///D:/spring_project/myblog/target/demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/spring-beans-5.2.7.RELEASE.jar!/"); URL url = new URL("file:///D:/spring_project/myblog/target/demo-0.0.1-SNAPSHOT.jar"); URLClassLoader loader = new URLClassLoader(new URL[]{nested_url, url}, null); Class<?> aClass = loader.loadClass("org.springframework.boot.loader.JarLauncher"); System.out.println(aClass); loader.loadClass("org.springframework.beans.BeanUtils"); }
此时运行就不会报错了!
我们可以调试,看看不调用JarFile.registerUrlProtocolHandler方法与调用方法对应的Handler
执行JarFile.registerUrlProtocolHandler方法后:
可以看到两者的区别,他们对应的handler不同,一个是java底层的,一个是spring-boot-loader自定义的。
此时我们就了解了为什么spring能加载jar中jar了!
继续spring的jar包启动原理!
基于反射调用Start-Class
接下来就要讲第三步通过反射找到Start-Class并调用。
这里最终没搞好调试的环境,所以直接点进源码看了:
调用到这里就会执行我们启动类的方法。
接下来我们看看启动方法调用链:
参考
-
-
项目jar包启动的命令
2019-08-21 10:40:11项目jar包启动的命令 当我们在linux系统里某个路径下创建了许多个jar包的文件夹后,我们可以通过 java -jar 命令脚本可以快速的启动我们的jar包以及实现全部启动及全部结束jar进程。 1.在linux系统中jar包存放位置 /...项目jar包启动的命令
当我们在linux系统里某个路径下创建了许多个jar包的文件夹后,我们可以通过 java -jar 命令脚本可以快速的启动我们的jar包以及实现全部启动及全部结束jar进程。
1.在linux系统中jar包存放位置
/opt/services/providers路径下是各个jar包存放的文件夹,同时将service.sh文件放入在该路径下,通过启动命令:
./service.sh start channeldemand 即可启动 YL-B-Channel-Demand-Provider.jar 包
channeldemand是 YL-B-Channel-Demand-Provider.jar在service.sh中配置的别名如果需要启动该目录下的所有jar包,通过命令即可启动所有jar包:
./service.sh start all
2.service.sh中启动jar包具体的配置
只需要更改1.程序代码数组:每个jar包起别名 2.程序名称数组:具体每个jar包具体的名称 3.jar包数组:具体的jar包 4.jar包路径数组:jar包所在的路径地址。5.PROJECTDIR属性:具体的jar包文件夹所在路径,/opt/services/providers/KaTeX parse error: Expected '}', got 'EOF' at end of input: {PATHS[i]}。
修改这5个地方即可实现jar包配置。#!/bin/bash #####################################################Environment Setting####################################################### #程序代码数组 APPS=(channelweb channelcorp channeldemand channelresume channeluser omsweb omscode omscorp omsdemand omsuser omszull oss publicweb search) #程序名称数组 NAMES=(YL-B-Channel-WEB YL-B-Channel-Corp-Provider YL-B-Channel-Demand-Provider YL-B-Channel-Resume-Provider YL-B-Channel-User-Provider YL-B-BOS-WEB YL-B-Code-Provider YL-B-Corp-Provider YL-B-Demand-Provider YL-B-User-Provider YL-B-Zull YL-B-OSS-Provider YL-B-Public-WEB YL-B-Search-Provider) #jar包数组 JARS=(YL-B-Channel-WEB.jar YL-B-Channel-Corp-Provider.jar YL-B-Channel-Demand-Provider.jar YL-B-Channel-Resume-Provider.jar YL-B-Channel-User-Provider.jar YL-B-BOS-WEB.jar YL-B-Code-Provider.jar YL-B-Corp-Provider.jar YL-B-Demand-Provider.jar YL-B-User-Provider.jar YL-B-Zull.jar YL-B-OSS-Provider.jar YL-B-Public-WEB.jar YL-B-Search-Provider.jar) #jar包路径数组 PATHS=(BM-B-Channel-WEB BM-B-Channel-Corp-Provider BM-B-Channel-Demand-Provider BM-B-Channel-Resume-Provider BM-B-Channel-User-Provider BM-B-BOS-WEB BM-B-Code-Provider BM-B-Corp-Provider BM-B-Demand-Provider BM-B-User-Provider BM-B-Zull BM-B-OSS BM-B-Public-WEB BM-B-Search-Provider) start(){ local APPNAME= local NAME= local CLASSNAME= local PROJECTDIR= local command="sh service.sh start" local cmd2="$1" local cmd2ok=0 local cnt=0 local okcnt=0 local PATH_LOG= #local C_PID="0" #for i in `seq 0 22` echo "---------------------------开始启动服务..." for(( i=0;i<${#APPS[@]};i++)) do APPNAME=${APPS[$i]} NAME=${NAMES[$i]} CLASSNAME=${JARS[$i]} PROJECTDIR=/opt/services/providers/${PATHS[$i]} PATH_LOG=/opt/logs/$NAME if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then cmd2ok=1 C_PID="0" cnt=0 #ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read pid PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` #do #C_PID=$(ps --no-heading $pid | wc -l) #if [ "$C_PID" == "1" ]; then if [ -n "$PID" ] then echo "$APPNAME---$NAME:己经运行,PID=$PID" #okcnt=$(($okcnt+1)) else cd $PROJECTDIR rm -f $PROJECTDIR/$nohup.out command="nohup java -jar -XX:MetaspaceSize=256m \ -XX:MaxMetaspaceSize=256m \ -Xms512m \ -Xmx512m \ -Xmn256m \ -Xss256k \ -XX:SurvivorRatio=8 \ -XX:+UseConcMarkSweepGC \ $CLASSNAME" exec $command >> $PROJECTDIR/nohup.out 2>&1 & #ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read pid #do # C_PID=$(ps --no-heading $pid | wc -l) #done PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` cnt=0 #while (("$C_PID" == "0")) while [ -z "$PID" ] do if (($cnt==30)) then echo "$APPNAME---$NAME:$cnt秒内未启动,请检查!" break fi cnt=$(($cnt+1)) sleep 1s #ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read pid #do # C_PID=$(ps --no-heading $pid | wc -l) #done PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` done okcnt=$(($okcnt+1)) echo "$APPNAME---$NAME:己经成功启动,PID=$PID" #出借模块和总装模块启动较慢 if [ "$APPNAME" == "deal" ] ; then echo "$APPNAME---$NAME:启动中..." sleep 30s fi if [ "$APPNAME" == "dispatch" ] ; then echo "$APPNAME---$NAME:启动中..." sleep 10s fi fi #done fi done if (($cmd2ok==0)) then echo "command2: all|channelweb|channelcorp|channeldemand|channelresume|channeluser|omsweb|omscode|omscorp|omsdemand|omsuser|omszull" else echo "---------------------------本次启动:$okcnt个服务" fi } stop(){ local APPNAME= local CLASSNAME= local PROJECTDIR= local command="sh service.sh stop" local cmd2="$1" local cmd2ok=0 #local C_PID="0" local okcnt=0 echo "---------------------------开始停止服务..." for(( i=0;i<${#APPS[@]};i++)) do APPNAME=${APPS[$i]} NAME=${NAMES[$i]} CLASSNAME=${JARS[$i]} PROJECTDIR=/opt/services/providers/${PATHS[$i]} if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then cmd2ok=1 #ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read PID PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` #do #C_PID=$(ps --no-heading $PID | wc -l) #if [ "$C_PID" == "1" ]; then if [ -n "$PID" ] then echo "$NAME:PID=$PID准备结束" kill $PID #C_PID=$(ps --no-heading $PID | wc -l) #while (("$C_PID" == "1")) PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` while [ -n "$PID" ] do sleep 1s #C_PID=$(ps --no-heading $PID | wc -l) PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` done echo "$NAME:成功结束" okcnt=$(($okcnt+1)) else echo "$NAME:未运行" fi #done fi done if (($cmd2ok==0)) then echo "command2: all|channelweb|channelcorp|channeldemand|channelresume|channeluser|omsweb|omscode|omscorp|omsdemand|omsuser|omszull" else echo "---------------------------本次共停止:$okcnt个服务" fi } case "$1" in start) start "$2" exit 1 ;; stop) stop "$2" ;; restart) stop "$2" start "$2" ;; *) echo "command1: start|stop|restart" exit 1 ;; esac
3. 通过 nohup java -jar jar名 & 启动jar包
进入到jar包所在的文件夹下通过
tail -fn 200 nohup.out 可以查看相关jar包的启动日志。java -jar -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xms512m -Xmx512m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC YL-B-Channel-Demand-Provider.jar &
-
手动推jar包及查看jar包启动情况
2021-06-30 23:44:09启动jar包? 在相应的文件夹中找到刚刚上传的jar包: tmp 为存储临时文件的文件夹,包含系统和用户创建的临时文件。当系统重新启动时,这个目录下的文件都将被删除。 复制文件到相应位置 找到新复制的... -
springboot的jar包启动时指定加载的配置文件
2022-05-10 10:24:46jar包同级目录下的config目录下的application.properties jar包同级目录下的application.properties classpath下的config目录下的application.properties classpath下的application.properties 若不想通过上面的... -
linux部署jar包启动脚本
2022-03-23 15:10:38新建一个start.sh文件,写入如下命令(以jar包名为 Oa.jar为例): ps -ef | grep Oa | grep -v grep | awk '{print $2}' | xargs kill -9 nohup java -jar Oa.jar >/dev/null 2>&1 & sleep 10s ... -
jar 包启动命令
2019-04-15 11:29:571、java -jar xxxxx.jar // 当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 2、java -jar xxxxx.jar & //当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。 3... -
linux服务器上jar包启动及关闭方式
2020-04-17 16:50:42随着微服务兴起,springboot也用得越来越多,用过springboot的都知道springboot项目默认是打包成jar包的,执行jar包就可以同时启动其内置的... 以上就是jar包启动和关闭的方法,来源于日常总结,不一定很全,欢迎补充。 -
SpringBoot可执行jar包启动原理
2019-12-17 11:09:25在使用spring-boot-maven-plugin插件执行mvn package命令构建可执行jar文件(Fat JAR)后用“java -jar”命令就可以直接运行应用程序。 <plugin> <groupId>org.springframework.boot</groupId> ... -
《SpringBoot系列六》:SpringBoot应用jar包启动原理
2022-03-28 11:24:02SpringBoot Jar包启动原理? SpringBoot Jar包目录结构? JarLauncher的运行原理? -
终于搞懂了SpringBoot jar包启动的原理
2020-09-04 15:47:04SpringBoot生成的jar包 Spring Boot的可执行jar包又称作“fat jar”,是包含所有三方依赖的jar。它与传统jar包最大的不同是包含了一个lib目录和内嵌了web容器。 可执行jar包的目录结构 通过maven命令打包后,会有2个... -
通用jar包启动脚本
2019-04-23 10:33:34通用jar包启动脚本 使用方法: 把本脚本和jar包放置在同一目录,并保证该目录下只有一个jar包。jar包的输出文件名为“nohup.当前目录名" 运行jar包: 脚本名后跟start|stop|restart|status即可 脚本内容: #!/... -
jar 包启动时,读取配置文件优先顺序
2021-06-18 10:47:521.1 springboot启动会扫描一下位置的application.properties或者application.yml作为默认的配置文件 工程根目录:./config/ 工程根目录:./ classpath:/config/ classpath:/ 加载的优先级顺序是从上向下加载,并且... -
springboot jar包启动修改端口
2021-01-13 15:14:29java -Dspring.profiles.active=dev -Dserver.port=8080 -jar test.jar java -jar test.jar --spring.profiles.active=dev --server.port=8080 -
windows后台运行jar包-jar 包启动
2019-07-29 14:00:47javaw -jar test.jar -
springboot 打成jar包启动引入外部xml文件
2019-11-27 09:38:32springboot项目打成了jar方式启动,引入的xml是外部配置文件,修改注解 @ImportResource -
windows环境下启动tomcat时指定启动参数及jar包启动时指定参数方法
2020-12-11 10:00:52运用springboot开发的项目一般部署都是打jar包进行部署,启动命令也很简单: java -jar xxx.jar 如果我需要在启动时指定配置文件是开发版还是线上版,可以如下操作,比如: java -jar xxx.jar --spring.profiles.... -
JAR包启动 控制台和文件 中文乱码解决
2020-01-14 11:19:02启动参数加上编码方式即可 java -Dfile.encoding=UTF-8 -jar app.jar --server.port=9090 -
IDEA中启动SpringBoot + jsp 项目能访问成功,但是打成jar包启动404
2019-03-11 17:44:48在往上找了好长时间也没解决问题,笔者突然灵机一动,因为之前pom文件中添加了tomcat-embed-jasper依赖,改写了SpringBoot内嵌的Tomcat,这时就不能使用jar包启动了,而应该打成war包。所以笔者将pom文件的打包方式... -
jar包启动读不到配置文件
2020-05-12 13:36:16打包后,cmd直接使用全路径执行jar包启动命令 java -jar D:\jar-prod\front-end-machine\front-end-machine-server-0.0.1-SNAPSHOT.jar,会报读取不到配置文件错误 jar包读取配置文件是从执行java -jar命令的目录... -
SpringBoot项目在windows系统中运行jar包启动
2020-10-19 15:14:31SpringBoot项目在开发中,方便快捷,有一点原因就是SpringBoot项目可以打jar包运行:把jar包直接扔服务器上,然后运行jar包就能访问项目接口了。下面介绍SpringBoot项目打jar包运行的步骤流程: 一、我们所熟悉的是... -
jar包启动中的JVM参数设置
2019-11-12 19:50:051.nohup nohup: 不挂断的运行,注意并没有后台运行的功能....可以让jar包一直后台运行 缺省的情况下会默认将信息输出到nohup.out文件中 2.-server 启动server版的jvm 3.JVM的内存分配 -Xms: 分配堆... -
springboot通过jar包启动中文日志乱码问题
2019-05-31 14:03:572.打成jar包,通过java -jar运行,通过log打印的日志出现中文乱码,System.out.print("")输出正常。 最终定位到logback.xml配置文件: 修改前: <include resource="org/springframework/boot/logging/... -
10秒学会springboot jar包启动及JVM参数设置
2020-06-18 11:57:53## 10秒入门 springboot jar包启动及JVM参数设置 java -Xms512m -Xmx1024m -jar test.jar -
java jar 包启动程序指定代理
2019-05-14 11:22:001.代码:java -Dhttp.proxyHost=ip -Dhttp.proxyPort=port -Dhttps.proxyHost=ip -Dhttps.proxyPort=1port -jar demo2.1.0.0.jar & 转载于:... -
springboot jar包启动项目,jvm参数设置
2019-10-08 22:49:28spring启动脚本 java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar jvm参数的含义 -... -
jar包启动日志显示乱码解决
2018-08-03 03:36:00背景:jar包启动,今天java开发过来找,说jar包启动日志是乱码。排错思路:1、xshell 窗口确定是utf-8支持中文的模式2、linux系统编码是utf-8cat /etc/sysconfig/i18n 3、jar包本身可能没有指定utf-8格式jar包启动...