Tomcat优化和JAVA程序编译及Nexus私有仓库

JVM最大内存32,再大的话就开始性能不好了 

tomcat 优化 1内存分配,2 垃圾回收机制  3 线程之类的

目录

 JVM 内存常用相关参数

 垃圾收集方式

 垃圾回收器

 按分代设置不同垃圾回收器

垃圾收集器设置 

 jconsole 和 JMX (远程连接)

线程池调整 

常用属性 

maven 部署准备 

编译 java 程序 Jpress      #目前 v5.02不支持JDK11

Maven的仓库优化配置


[root@ubuntu2004 ~]#cat Heap.java 
public class Heap {
    public static void main(String[] args){
        //返回虚拟机试图使用的最大内存,字节单位
        long max = Runtime.getRuntime().maxMemory();
        //返回JVM初始化总内存
        long total = Runtime.getRuntime().totalMemory();

        System.out.println("max="+max+"字节\t"+(max/(double)1024/1024)+"MB");
        System.out.println("total="+total+"字节\t"+(total/(double)1024/1024)+"MB");
    }
}

[root@ubuntu2004 ~]#javac Heap.java  #解析查看内存

[root@ubuntu2004 ~]#java Heap   #执行
max=513802240字节    490.0MB
total=33554432字节    32.0MB

[root@ubuntu2004 ~]#java -XX:+PrintGCDetails Heap  #详细版查看
[0.001s][warning][gc] -XX:+PrintGCDetails is deprecated. Will use -Xlog:gc* instead.
[0.003s][info   ][gc,heap] Heap region size: 1M
[0.005s][info   ][gc     ] Using G1
[0.005s][info   ][gc,heap,coops] Heap address: 0x00000000e1600000, size: 490 MB, Compressed Oops mode: 32-bit
max=513802240字节    490.0MB
total=33554432字节    32.0MB
[0.088s][info   ][gc,heap,exit ] Heap
[0.088s][info   ][gc,heap,exit ]  garbage-first heap   total 32768K, used 1024K [0x00000000e1600000, 0x0000000100000000)
[0.088s][info   ][gc,heap,exit ]   region size 1024K, 2 young (2048K), 0 survivors (0K)
[0.088s][info   ][gc,heap,exit ]  Metaspace       used 4792K, capacity 4842K, committed 5120K, reserved 1056768K
[0.088s][info   ][gc,heap,exit ]   class space    used 406K, capacity 424K, committed 512K, reserved 1048576K

 

#指定内存空间
[root@centos8 ~]#java -Xms1024m -Xmx1024m -XX:+PrintGCDetails Heap
max=1037959168字节 989.875MB
total=1037959168字节 989.875MB

 JVM 内存常用相关参数

  • JVM是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。所以,JAVA虚拟机JVM是属于JRE的,而现在我们安装JDK时也附带安装了JRE(当然也可以单独安装JRE)。
     

Java 命令行参考文档: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

选项分类

  • -选项名称 此为标准选项,所有HotSpot都支持
  • -X选项名称 此为稳定的非标准选项
  • -XX:选项名称 非标准的不稳定选项,下一个版本可能会取消 

 #指定内存空间
[root@centos8 ~]#java -Xms1024m -Xmx1024m -XX:+PrintGCDetails Heap
max=1037959168字节 989.875MB
total=1037959168字节 989.875MB

 vim /usr/local/apache-tomcat-9.0.65/bin/catalina.sh

# -----------------------------------------------------------------------------
JAVA_OPTS="-Xms1024m -Xmx1024m"    #页面往下返需要在这里加上加上这一行

# OS specific support.  $var _must_ be set to either true or false.
cygwin=false
darwin=false
os400=false

 [root@ubuntu2004 ~]#systemctl restart tomcat.service   重启
[root@ubuntu2004 ~]#ps aux |grep tomcat                      #查看

 垃圾收集方式

按工作模式不同:指的是GC线程和工作线程是否一起运行

  • 独占垃圾回收器:只有GC在工作,STW 一直进行到回收完毕,工作线程才能继续执行
  • 并发垃圾回收器:让GC线程垃圾回收某些阶段可以和工作线程一起进行,如:标记阶段并行,回收阶段

仍然串行

  • 按回收线程数:指的是GC线程是否串行或并行执行
  • 串行垃圾回收器:一个GC线程完成回收工作
  • 并行垃圾回收器:多个GC线程同时一起完成回收工作,充分利用CPU资源

 垃圾回收器

 按分代设置不同垃圾回收器


新生代串行收集器Serial:单线程、独占式串行,采用复制算法,简单高效但会造成STW
新生代并行回收收集器PS(Parallel Scavenge):多线程并行、独占式,会产生STW, 使用复制算法
关注调整吞吐量,此收集器关注点是达到一个可控制的吞吐量

Parallel Scavenge

吞吐量 = 运行用户代码时间/(运行用户代码时间+垃圾收集时间),比如虚拟机总共运行100分
钟,其中垃圾回收花掉1分钟,那吞吐量就是99%。

十分钟需要1分钟来清理,这一分钟集中在一起

ParNew

新生代并行收集器ParNew:就是Serial 收集器的多线程版,将单线程的串行收集器变成了多线程并
行、独占式,使用复制算法,相当于PS的改进版。

 分钟需要1分钟来清理,这一分钟拆成一秒间断清理·

垃圾收集器设置 

优化调整Java 相关参数的目标: 尽量减少FullGC和STW
通过以下选项可以单独指定新生代、老年代的垃圾收集器

  • -server 指定为Server模式,也是默认值,一般使用此工作模式
  • -XX:+UseSerialGC
  •        运行在Client模式下,新生代是Serial, 老年代使用SerialOld

-XX:+UseParNewGC

  • 新生代使用ParNew,老年代使用SerialOld

-XX:+UseParallelGC

  • 运行于server模式下,新生代使用Parallel Scavenge, 老年代使用 Parallel Old

-XX:+UseParallelOldGC

  • 新生代使 用Paralell Scavenge, 老年代使用Paralell Old,和上面-XX:+UseParallelGC 相同
  • -XX:ParallelGCThreads=N,在关注吞吐量的场景使用此选项增加并行线程数

-XX:+UseConcMarkSweepGC

  • 新生代使用ParNew, 老年代优先使用CMS,备选方式为Serial Old
  • 响应时间要短,停顿短使用这个垃圾收集器
  • -XX:CMSInitiatingOccupancyFraction=N,N为0-100整数表示达到老年代的大小的百分比多
  • 少触发回收默认68
  • -XX:+UseCMSCompactAtFullCollection 开启此值,在CMS收集后,进行内存碎片整理
  • -XX:CMSFullGCsBeforeCompaction=N 设定多少次CMS后,进行一次内存碎片整理
  • -XX:+CMSParallelRemarkEnabled 降低标记停顿

范例: 

[root@ubuntu2004 ~]#vim /usr/local/tomcat/bin/catalina.sh

-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5

 10224后面

 jconsole 和 JMX (远程连接)

图形化工具,可以用来查看Java进程信息

MX(Java Management Extensions,即Java管理扩展)是一个为JAVA应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
JMX最常见的场景是监控Java程序的基本信息和运行情况,任何Java程序都可以开启JMX,然后使用JConsole或Visual VM进行预览。

#为Java程序开启JMX很简单,只要在运行Java程序的命令后面指定如下命令即可
java \
-Dcom.sun.management.jmxremote \ #启用远程监控JMX
-Djava.rmi.server.hostname=10.0.0.100 \ #指定自已监听的IP
-Dcom.sun.management.jmxremote.port=12345 \ #指定监听的PORT
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar app.jar|app.war

和前面操作一样 

线程池调整 

[root@centos8 ~]#vim /usr/local/tomcat/conf/server.xml
......
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" maxThreads="2000"/>
.....

常用属性 

  • connectionTimeout :连接超时时长,单位ms
  • maxThreads:最大线程数,默认200
  • minSpareThreads:最小空闲线程数
  • maxSpareThreads:最大空闲线程数
  • acceptCount:当启动线程满了之后,等待队列的最大长度,默认100
  • URIEncoding:URI 地址编码格式,建议使用 UTF-8
  • enableLookups:是否启用客户端主机名的DNS反向解析,缺省禁用,建议禁用,就使用客户端IP就行
    •     compression:是否启用传输压缩机制,建议 "on",CPU和流量的平衡
    • compressionMinSize:启用压缩传输的数据流最小值,单位是字节
    • compressableMimeType:定义启用压缩功能的MIME类型text/html, text/xml, text/css,
    • text/javascript

maven 部署准备 

  1.  导入包
  2. [root@ubuntu2004 ~]#tar -xf apache-maven-3.8.6-bin.tar.gz  -C /usr/local/
  3. [root@ubuntu2004 ~]#cd /usr/local/
  4. [root@ubuntu2004 local]#ln -s apache-maven-3.8.6/ maven
  5. [root@ubuntu2004 local]#echo 'PATH=/usr/local/maven/bin:$PATH' > /etc/profile.d/maven.sh
  6. [root@ubuntu2004 local]#. /etc/profile.d/maven.sh
  7. [root@ubuntu2004 local]#mvn -version

Apache Maven 3.8.6   (84538c9988a25aec085021c365c560670ad80f63)

 git clone https://gitee.com/lbtooth/spring-boot-helloWorld.git     网上拉取

[root@ubuntu2004 ~]#cd spring-boot-helloWorld/        打开

[root@ubuntu2004 spring-boot-helloWorld]#mvn clean package -Dmaven.test.skip=true   编译

[root@ubuntu2004 opt]#java -jar spring-boot-helloworld-0.9.0-SNAPSHOT.jar --server.port=8181

编译运行      指定端口(可以不加)

 vim spring-boot-helloWorld/src/main/java/com/neo/controller/HelloWorldController.java 

#可以在这里把0.9那个版本号改一下,重新编译执行 就可以出来新的

编译 java 程序 Jpress      #目前 v5.02不支持JDK11

#下载源码
[root@rocky8 ~]#git clone https://gitee.com/JPressProjects/jpress.git
#或者
[root@rocky8 ~]#wget wget -O jpress-v4.2.0.tar.gz
'https://gitee.com/JPressProjects/jpress/repository/archive/v4.2.0?
format=tar.gz'

[root@ubuntu2004 jpress]#pwd
/root/jpress
 

[root@ubuntu2004 jpress]#mvn clean install package -Dmaven.test.skip=true  #编译
 

[root@ubuntu2004 jpress]#cp starter-tomcat/target/starter-tomcat-5.0.war /usr/local/tomcat/webapps/jpress.war    #移到这里可以让网页访问  

#安装JDK
[root@ubuntu1804 ~]#apt install openjdk-8-jdk -y
[root@ubuntu1804 ~]#java -version 

#可能需要科学上网下载
[root@ubuntu1804 ~]#wget https://download.sonatype.com/nexus/3/nexus-3.29.2-02-
unix.tar.gz
[root@ubuntu1804 ~]#ll -h nexus-3.29.2-02-unix.tar.gz

[root@ubuntu2004 ~]#tar xf nexus-3.41.1-01-unix.tar.gz -C /usr/local/[root@ubuntu2004 ~]

#cd /usr/local/

[root@ubuntu2004 local]#ln -s nexus-3.41.1-01/ nexus     #创建软裂解
#指定运行身份
[root@ubuntu1804 ~]#vim /usr/local/nexus/bin/nexus.rc
run_as_user="root"

[root@ubuntu2004 local]#cat /lib/systemd/system/nexus.service   #创建管理文件把它写进去

[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/usr/local/nexus/bin/nexus start
ExecStop=/usr/local/nexus/bin/nexus stop
User=root
#User=nexus
Restart=on-abort
[Install]
WantedBy=multi-user.target

[root@ubuntu2004 local]#systemctl daemon-reload 

[root@ubuntu2004 local]#systemctl enable --now nexus.service   就可以了

Maven的仓库优化配置

默认仓库maven-central使用国外仓库地址,可修改为如下的国内镜像地址进行加速

http://maven.aliyun.com/nexus/content/groups/public

左上角 点击Sign in  

[root@ubuntu2004 local]#cat /usr/local/sonatype-work/nexus3/admin.password 
693f11d1-5198-499f-8827-d1657cceb217           #cat查看给出的路径密码

 

可以修改为国内镜像,参考阿里云以下说明

仓库服务

 把这里改成自己想要的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值