Linux上开机自动运行jar

启动JAR

1
nohup java -jar xxx.jar >temp.txt &

设置内存占用

1
java -jar -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128M xxx.jar

说明:

  1. 堆内存:最小256M,最大512M。(对象使用的内存)

  2. 永久内存:最小64M,最大128M。(类使用的内存,PermGen)

参数详解

  • -Xms256m -Xmx512m 堆内存:最小256M,最大512M。(对象使用的内存)
  • -XX:PermSize=64M -XX:MaxPermSize=128M 永久内存:最小64M,最大128M。(类使用的内存,PermGen)

设置日志中文编码

1
nohup java -Dfile.encoding=utf-8 -jar xxx.jar >temp.txt &

查看内存占用

查看pid

1
lsof -i:8895

查看内存占用

1
jmap -heap pid

结果

Attaching to process ID 19438, please wait…
Debugger attached successfully.
Server compiler detected.
JVM version is 25.221-b11

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 89128960 (85.0MB)
MaxNewSize = 715653120 (682.5MB)
OldSize = 179306496 (171.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
capacity = 651689984 (621.5MB)
used = 405279136 (386.5043029785156MB)
free = 246410848 (234.99569702148438MB)
62.18894657739592% used
From Space:
capacity = 5242880 (5.0MB)
used = 4774176 (4.553009033203125MB)
free = 468704 (0.446990966796875MB)
91.0601806640625% used
To Space:
capacity = 14680064 (14.0MB)
used = 0 (0.0MB)
free = 14680064 (14.0MB)
0.0% used
PS Old Generation
capacity = 252182528 (240.5MB)
used = 38105624 (36.340354919433594MB)
free = 214076904 (204.1596450805664MB)
15.110334685835173% used

27080 interned Strings occupying 2811288 bytes.

查看某个进程的对象占用对象最大的命令:

1
jmap -histo pid | head -n 20

注册服务 开机自启

添加服务

新建/etc/init.d/shuatiapi.sh 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/sh
# chkconfig: 2345 85 15
# description:auto_run

#JAR根位置
JAR_ROOT=/data/wwwroot/8895shuatiapi/

#JAR位置
JAR_PATH="$JAR_ROOT"shuatiapi-0.0.1-SNAPSHOT.jar

#LOG位置
LOG_PATH="$JAR_ROOT"log.txt

#开始方法
start() {
cd $JAR_ROOT
nohup java -Dfile.encoding=utf-8 -jar -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128M $JAR_PATH >$LOG_PATH &
echo "$JAR_PATH start success."
}

#结束方法
stop() {
kill -9 `ps -ef|grep $JAR_PATH|grep -v grep|grep -v stop|awk '{print $2}'`
echo "$JAR_PATH stop success."
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Userage: $0 {start|stop|restart}"
exit 1
esac

添加执行权限

给sh文件和jar可执行权限

1
2
chmod +x /etc/init.d/shuatiapi.sh
chmod +x /data/wwwroot/8895shuatiapi/shuatiapi-0.0.1-SNAPSHOT.jar

添加软连接

这一步不是必要的
我们可以把文件以软连接的方式放在服务所在目录中

1
ln -s /data/wwwroot/8895shuatiapi/shuatiapi.sh /etc/init.d/shuatiapi.sh

右侧的地址相当于快捷方式

设置开机启动

首先,添加为系统服务

1
chkconfig --add shuatiapi.sh

开机自启动

1
chkconfig shuatiapi.sh on

查看

1
chkconfig --list

启动

1
service shuatiapi.sh start

停用

1
service shuatiapi.sh stop

查看启动情况

1
lsof -i:8895