Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导应用程序性能低下_Java_Spring Boot_Jmeter_Hikaricp - Fatal编程技术网

Java Spring引导应用程序性能低下

Java Spring引导应用程序性能低下,java,spring-boot,jmeter,hikaricp,Java,Spring Boot,Jmeter,Hikaricp,我有一个非常基本的Spring引导应用程序,它为一个非常简单的实体公开CRUDRESTAPI。使用JMeter运行性能测试表明响应时间非常糟糕 产品(id、名称、描述) 约束:id PK自动递增 设置: 线程数:100 爬升周期:10(秒) 无限循环 持续时间:60(秒) 4个API,用于执行以下功能 @Override public Product findById(Integer id) { return repository.findById(id)

我有一个非常基本的Spring引导应用程序,它为一个非常简单的实体公开CRUDRESTAPI。使用JMeter运行性能测试表明响应时间非常糟糕

产品(id、名称、描述)

约束:id PK自动递增

设置:

  • 线程数:100
  • 爬升周期:10(秒)
  • 无限循环
  • 持续时间:60(秒)

4个API,用于执行以下功能

@Override
public Product findById(Integer id) {
    return repository.findById(id)
            .map(mapper::map)
            .orElseThrow(() -> new RecordNotFoundException(1, "Product not found"));
}

@Transactional
@Override
public Product create(Product Product) {
    ProductEntity entity = mapper.map(Product);
    
    repository.save(entity);

    return mapper.map(entity);
}

@Transactional
@Override
public Product update(Integer id, Product Product) {
    ProductEntity entity = repository.findById(id).orElseThrow();

    mapper.mapTo(entity, Product);

    repository.save(entity);

    return mapper.map(entity);
}

@Transactional
@Override
public void delete(Integer id) {    
    repository.deleteById(id);
}
我试着用visualvm来了解原因。似乎存储库功能占用了太多的时间。我认为是数据库导致了这个问题

连接池设置:因为我没有设置任何内容,并且假设我的应用程序使用HikariCP,默认大小为100

数据库:对于上述结果,请尝试使用MySQL(innodb引擎)并禁用自动提交

弹簧启动版本:2.4.0

系统:16GB RAM,核心i7

问题:

我说的对吗?这里的瓶颈是连接池或数据库,池大小的最佳值是什么以减少响应时间

为什么所有的API在图中都遵循相同的趋势-一起上升或下降

更新:

  • 根据建议,它们都托管在一台单独的机器上(基于云)
  • 略加分析-存储库需要时间(com.sun.proxy.$.methodName)

  • 我可以想到以下可能的原因:

  • 运行spring boot应用程序的机器缺少资源(CPU、RAM等)-请确保使用
  • 使用诸如或之类的探查器工具来查看应用程序在哪里花费的时间最多
  • 如果您认为问题出在数据库中:
    • 确保数据库引擎已正确设置,即遵循
    • 这也可能是您的查询效率不高的情况,因此,只需添加相关的查询可能会大大加快速度

    您可以执行以下操作来查找问题:

    1-使用Gatling进行性能测试,它使用的资源较少,不会影响测试结果

    2-使用APM代理精确地监视长时间运行的进程是什么,是数据库查询还是非查询()


    3-使用undertow而不是tomcat或其他web应用程序

    JMeter测试、Spring引导和DB是否在同一台服务器上运行(开发人员设置)?您使用的是SSD还是HDD?在这种情况下,所有线程都在争夺CPU执行时间。每个应用程序都应该在不同的机器上执行,就像在生产中一样,以获得可靠的测量结果。下面是一些我希望能有所帮助的阅读资料:当然,它位于存储库和数据库(com.sun.proxy.$(存储库)方法之间,占用了所有的时间。我想也许tunning连接池在这里会有所帮助