springboot 性能优化 转载:https://blog.csdn.net/maoyeqiu/article/details/78059329

Posted wb54979

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot 性能优化 转载:https://blog.csdn.net/maoyeqiu/article/details/78059329相关的知识,希望对你有一定的参考价值。

这一部分分为三个部分,启动部分的优化,Tomcat参数设置和内存调优

启动部分的优化

这一小节来自 Spring Boot 性能优化  http://www.cnblogs.com/chen110xi/p/6198481.html
springboot启动优化主要是不要加载一些没有用的类文件
组件自动扫描带来的问题
默认情况下,我们会使用 @SpringBootApplication 注解来自动获取应用的配置信息,但这样也会给应用带来一些副作用。使用这个注解后,会触发自动配置( auto-configuration )和 组件扫描 ( component scanning ),这跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的作用是一样的。这样做给开发带来方便的同时,也会有三方面的影响:
1、会导致项目启动时间变长。当启动一个大的应用程序,或将做大量的集成测试启动应用程序时,影响会特别明显。
2、会加载一些不需要的多余的实例(beans)。
3、会增加 CPU 消耗。
针对以上三个情况,我们可以移除 @SpringBootApplication 和 @ComponentScan 两个注解来禁用组件自动扫描,然后在我们需要的 bean 上进行显式配置:
// 移除 @SpringBootApplication and @ComponentScan, 用 @EnableAutoConfiguration 来替代
@Configuration
@EnableAutoConfiguration
public class SampleWebUiApplication
    // 用 @Bean 注解显式配置,以便被 Spring 扫描到
    @Bean
    public MessageController messageController(MessageRepository messageRepository)
        return new MessageController(messageRepository);
   

如何避免组件自动扫描带来的问题
我们在上面提到,@SpringBootApplication 注解的作用跟 @EnableAutoConfiguration 注解的作用是相当的,那就意味着它也能带来上述的三个问题。要避免这些问题,我们就要知道我们需要的组件列表是哪些,可以用 -Ddebug 的方式来帮助我们明确地定位:
mvn spring-boot:run -Ddebug

=========================
AUTO-CONFIGURATION REPORT
=========================

Positive matches:
-----------------
   DispatcherServletAutoConfiguration
      - @ConditionalOnClass classes found: org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
      - found web application StandardServletEnvironment (OnWebApplicationCondition)
...
接着拷贝 Positive matches 中列出的信息:
DispatcherServletAutoConfiguration
EmbeddedServletContainerAutoConfiguration
ErrorMvcAutoConfiguration
HttpEncodingAutoConfiguration
HttpMessageConvertersAutoConfiguration
JacksonAutoConfiguration
JmxAutoConfiguration
MultipartAutoConfiguration
ServerPropertiesAutoConfiguration
PropertyPlaceholderAutoConfiguration
ThymeleafAutoConfiguration
WebMvcAutoConfiguration
WebSocketAutoConfiguration
然后来更新项目配置,显式地引入这些组件,引入之后,再运行一下应用确保没有错误发生:

@Configuration
@Import(
        DispatcherServletAutoConfiguration.class,
        EmbeddedServletContainerAutoConfiguration.class,
        ErrorMvcAutoConfiguration.class,
        HttpEncodingAutoConfiguration.class,
        HttpMessageConvertersAutoConfiguration.class,
        JacksonAutoConfiguration.class,
        JmxAutoConfiguration.class,
        MultipartAutoConfiguration.class,
        ServerPropertiesAutoConfiguration.class,
        PropertyPlaceholderAutoConfiguration.class,
        ThymeleafAutoConfiguration.class,
        WebMvcAutoConfiguration.class,
        WebSocketAutoConfiguration.class,
)
public class SampleWebUiApplication
 

在上面的代码中,我们可以删掉我们不需要的组件信息,来提高应用的性能,比如在我的项目中,不需要 JMX 和 WebSocket 功能,我就删掉了它们。删掉之后,再次运行项目,确保一切正常。

tomcat连接数


这部分和原来的形式有所区别,需要在Tomcat的配置文件中修改,如:
<Connector port="8080" address="localhost"
maxThreads="250" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8181" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
对于springboot只需要在代码中的配置文件application.properties进行配置即可,如:
server.tomcat.max-connections=1000
server.tomcat.max-threads=250
tomcat内存调优

由于springboot内嵌tomcat和传统的方式有所区别,我们之前要更改文件(catalina.sh) 位于"\\tomcat server folder\\bin\\catalina.sh",下面,给出这个文件的配置信息,
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms1024m -Xmx1024m
-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m
-XX:MaxPermSize=512m -XX:+DisableExplicitGC"
而在springboot中我们需要在启动的时候指定一些参数命令,例如下边这种形式
java -Xmx4096m  -Xss256k -jar myapp-rest-service-0.1.0.jar
如果麻烦我们可以将启动命令写在脚本之中,每次启动的时候运行脚本就行了,关于这块的优化可以参照
 

以上是关于springboot 性能优化 转载:https://blog.csdn.net/maoyeqiu/article/details/78059329的主要内容,如果未能解决你的问题,请参考以下文章

Linux按照CPU内存磁盘IO网络性能监测转载

iOS性能优化-内存优化

springboot性能优化

聊聊性能优化模式

转载PHP7革新与性能优化

前端性能优化