优化springboot

摘要:
简介:在SpringBoot的Web项目中,默认使用内置Tomcat。当然,也可以配置内置码头。内置的优点是什么?默认情况下,64位JDK启动java服务器jarspringboot-1.0.jar模式。2.指定堆参数。这用于根据服务器的内存大小设置堆参数-Xms:设置Java堆栈的初始化大小-Xmx:设置最大Java堆大小Java服务器-Xms512m-Xmx768m-jarspringboot-1.0.jar将初始化堆内存设置为512MB,最大值为768MB。

介绍

在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢?
1. 方便微服务部署。
2. 方便项目启动,不需要下载Tomcat或者Jetty

针对目前的容器优化,目前来说没有太多地方,需要考虑如下几个点

  1. 线程数
  2. 超时时间
  3. 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按钮。

优化springboot第1张

出现弹窗,点击+按钮,找到Remote选项。

优化springboot第2张

在【1】中填入Remote项目名称,在【2】中填IP地址和端口号,在【3】选择远程调试的项目module,配置完成后点击OK即可

如果碰到连接超时的情况,很有可能服务器的防火墙的问题,举例CentOs7,关闭防火墙

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

点击debug按钮,IDEA控制台打印信息:

优化springboot第3张

说明远程调试成功。

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和端口即可

优化springboot第4张

点击连接,经过稍稍等待之后,即可完成连接,如下图所示:

优化springboot第5张

 同理,JvisualVm的远程连接是同样的,启动参数也是一样.

然后在本机JvisualVm输入IP:PORT,即可进行远程连接:如下图所示:

优化springboot第6张

相比较Jvisualvm功能更加强大一下,界面也更美观

注明:现已入住腾讯云自媒体分享计划

免责声明:文章转载自《优化springboot》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转]几个常见的语音交互平台的简介和比较自定义 Word 模板下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

tomcat优化

tomcat的内存使用配置,最大连接数配置。 如何修改配置呢,在/tomcat的/bin/下面有个脚本文件catailna.sh。 如果 windows 是bat设置tomcat的使用内存,其实就是设置jvm的使用参数。 一.Tomcat内存优化 Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalin...

Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景

在上周三下午时,客户、业务和测试人员同时反溃生产环境登录进入不了系统,我亲自测试时,第一次登录进去了,待退出后再登录时,复现了客户的问题,场景像是请求连接被拒绝了,分析后判断是spring boot的连接数使用完了,于是重启了服务,客户访问都恢复正常。虽然问题暂时解决了,但实质原因还无法确定。根据分析,判断是spring boot服务连接被拒绝,查看配置的...

线程池:第三章:线程池的手写改造和拒绝策略以及线程池配置合理线程数

根据阿里巴巴开发手册: 我们线程池使用ThreadPoolExecutor的方式进行创建,下面看底层源码: 有七个参数: 现在创建它:核心线程数2,同时执行的最大线程数5,多余线程存活时间1L,单位秒,阻塞队列3,默认线程工厂,拒绝策略 创建线程池: 第一种拒绝策略:AbortPolicy:超出最大线程数,直接抛出RejectedExecution...

C#异步编程的实现方式——ThreadPool线程池

在需要创建的线程很多,且都是比较小的线程的情况下,可以使用线程池(ThreadPool类)。ThreadPool是一个静态方法,提供了对一个线程集合的操作,它会在线程数不足时增加线程,空闲线程数过多时释放资源。 1、ThreadPool简单应用 调用ThreadPool.QueueUserWorkItem()方法,传递一个WaitCallBack委托类型的...

1. Redis是属于多线程还是单线程?不同版本之间有什么区别?

Redis是普及率最高的技术之一,不仅是面试会被经常问到,在工作中也是非常常用的。下面我们就深入的了解一下Redis,顺便会介绍一些常见的面试题。 问题:Redis是属于单线程还是多线程? 不同版本的Redis是不同的,在Redis4.0之前,Redis是单线程运行的,但是单线程并不代表效率就低,像Nginx、Nodejs也是单线程程序,但是它们的效率并不...

c#实现多线程代码例子

相信大家都有用过网际快车等下载资源的经历,它里面是可以设置线程数的(近年版本默认是10,曾经默认是5)。它会将文件分成与线程数相同的部分,然后每个线程下载自己的那一部分,这样下载效率就有可能提高。相信大家都有加多线程数,提升下载效率的经历。但细心的用户会发现,在带宽一定的情况下,并不是线程越多,速度越快,而是在某一点达到峰值。在C#中用多线程并不难实现。它...