JVM活学活用——优化springboot
介绍
在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢? 1. 方便微服务部署。 2. 方便项目启动,不需要下载Tomcat或者Jetty
针对目前的容器优化,目前来说没有太多地方,需要考虑如下几个点
- 线程数
- 超时时间
- jvm优化
针对上述的优化点来说,首先线程数是一个重点,初始线程数和最大线程数,初始线程数保障启动的时候,如果有大量用户访问,能够很稳定的接受请求, 而最大线程数量用来保证系统的稳定性,而超时时间用来保障连接数不容易被压垮,如果大批量的请求过来,延迟比较高,不容易把线程打满。这种情况在生产中是比较常见的 一旦网络不稳定,宁愿丢包也不愿意把机器压垮。 jvm优化一般来说没有太多场景,无非就是加大初始的堆,和最大限制堆,当然也不是无限增大,根据的情况进快速开始
在spring boot配置文件中application.yml,添加以下配置
server:
tomcat:
min-spare-threads: 20
max-threads: 100
connection-timeout: 5000
这块对tomcat进行了一个优化配置,最大线程数是100,初始化线程是20,超时时间是5000ms
Jvm优化
这块主要不是谈如何优化,jvm优化是一个需要场景化的,没有什么太多特定参数,一般来说在server端运行都会指定如下参数 初始内存和最大内存基本会设置成一样的,具体大小根据场景设置,-server是一个必须要用的参数, 至于收集器这些使用默认的就可以了,除非有特定需求。
1.使用-server模式
设置JVM使用server模式。64位JDK默认启动该模式
java -server -jar springboot-1.0.jar
2.指定堆参数
这个根据服务器的内存大小,来设置堆参数。
-Xms :设置Java堆栈的初始化大小 -Xmx :设置最大的java堆大小
java -server -Xms512m -Xmx768m -jar springboot-1.0.jar
设置初始化堆内存为512MB,最大为768MB。
3.远程Debug
在服务器上将启动参数修改为:
java -Djavax.net.debug=ssl -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 -jar springboot-1.0.jar
这个时候服务端远程Debug模式开启,端口号为8888。
在IDEA中,点击Edit Configuration按钮。
出现弹窗,点击+按钮,找到Remote选项。
在【1】中填入Remote项目名称,在【2】中填IP地址和端口号,在【3】选择远程调试的项目module,配置完成后点击OK即可
如果碰到连接超时的情况,很有可能服务器的防火墙的问题,举例CentOs7,关闭防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
点击debug按钮,IDEA控制台打印信息:
说明远程调试成功。
JVM工具远程连接
jconsole与Jvisualvm远程连接
通常我们的web服务都输部署在服务器上的,在window使用jconsole是很方便的,相对于Linux就有一些麻烦了,需要进行一些设置。
1.查看hostname,首先使用
hostname -i
查看,服务器的hostname为127.0.0.1,这个是不对的,需要进行修改
2.修改hostname
修改/etc/hosts文件,将其第一行的“127.0.0.1 localhost.localdomain localhost”,修改为:“192.168.44.128 localhost.localdomain localhost”.“192.168.44.128”为实际的服务器的IP地
3.重启Linux,在服务器上输入hostname -i,查看实际设置的IP地址是否为你设置的
4.启动服务,参数为:
java -jar -Djava.rmi.server.hostname=192.168.44.128 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=911 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false jantent-1.0-SNAPSHOT.jar
ip为192.168.44.128,端口为911 。
5.打开Jconsole,进行远程连接,输入IP和端口即可
点击连接,经过稍稍等待之后,即可完成连接,如下图所示:
同理,JvisualVm的远程连接是同样的,启动参数也是一样.
然后在本机JvisualVm输入IP:PORT,即可进行远程连接:如下图所示:
相比较Jvisualvm功能更加强大一下,界面也更美观
注明:现已入住腾讯云自媒体分享计划
- WCF服务端运行时架构体系详解[上篇]
- 使命必达: 深入剖析WCF的可靠会话[编程篇](下)
- 在网页里让文本框只能输入数字的一种方法。外加回车换Tab
- 如何用Python从零开始实现简单的线性回归
- 使命必达: 深入剖析WCF的可靠会话[编程篇](上)
- 页面回发后,让页面自动滚动到指定位置的一种简单的方法
- [自定义服务器控件] 第二步:下拉列表框。
- WCF服务端运行时架构体系详解[中篇]
- [自定义服务器控件] 第三步:CheckBoxList。
- 用Keras通过Python进行卷积神经网络的手写数字识别
- 反射的另类实现。(不知道这么用还算不算反射了?)
- 如何让普通变量也支持事务回滚?
- What is "Type" in managed heap?
- 一个特殊场景的 LR 预测优化 Trick
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Mybatis高级查询(一):resultMap与resultType
- JDK错误用法—TimSort
- Mybatis高级查询(三):分页查询
- 以OpenResty搭建RTB竞价引擎接入层
- 优化Linux bootloader速度的究极之路:从GRUB到EFI Stub
- Linux--nc命令
- Netty之美--I/O模型
- 023.基于IT论坛案例学习Elasticsearch(二):Query高级知识(一)
- 打卡群刷题总结0807——验证二叉搜索树
- 打卡群刷题总结0808——二叉树的层序遍历
- Mybatis高级查询(四):延迟加载
- I/O多路复用器之隐秘的角落
- 打卡群刷题总结0809——二叉树的锯齿形层次遍历
- 简单的ssm整合练手项目:汽车项目
- 在spring-boot中使用pageHelper插件