Java Spring引导应用程序性能低下
我有一个非常基本的Spring引导应用程序,它为一个非常简单的实体公开CRUDRESTAPI。使用JMeter运行性能测试表明响应时间非常糟糕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)
产品(id、名称、描述)
约束:id PK自动递增
设置:
- 线程数:100
- 爬升周期:10(秒)
- 无限循环
- 持续时间:60(秒)
@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在图中都遵循相同的趋势-一起上升或下降
更新:
我可以想到以下可能的原因:
- 确保数据库引擎已正确设置,即遵循
- 这也可能是您的查询效率不高的情况,因此,只需添加相关的查询可能会大大加快速度
3-使用undertow而不是tomcat或其他web应用程序JMeter测试、Spring引导和DB是否在同一台服务器上运行(开发人员设置)?您使用的是SSD还是HDD?在这种情况下,所有线程都在争夺CPU执行时间。每个应用程序都应该在不同的机器上执行,就像在生产中一样,以获得可靠的测量结果。下面是一些我希望能有所帮助的阅读资料:当然,它位于存储库和数据库(com.sun.proxy.$(存储库)方法之间,占用了所有的时间。我想也许tunning连接池在这里会有所帮助