Java 内存泄漏Springboot
我有一个应用程序似乎占用了太多内存。我一直在努力寻找源头有一段时间了。但还是没有运气 我读过几篇文章,指出JPA是SpringBoot内存问题的罪魁祸首。我只有一个存储库,所以我无法想象这是一个问题Java 内存泄漏Springboot,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有一个应用程序似乎占用了太多内存。我一直在努力寻找源头有一段时间了。但还是没有运气 我读过几篇文章,指出JPA是SpringBoot内存问题的罪魁祸首。我只有一个存储库,所以我无法想象这是一个问题 @Repository public interface WordRepository extends JpaRepository<Word, Long> { @Query("SELECT w FROM Word w WHERE w.value IN (:words)")
@Repository
public interface WordRepository extends JpaRepository<Word, Long> {
@Query("SELECT w FROM Word w WHERE w.value IN (:words)")
List<Word> findAllIn(@Param("words") List<String> words);
Word findFirstByValue(String value);
@Transactional
Long removeByValue(String value);
Page<Word> findAllByCategory(Pageable pageable, String category);
}
我在这里使用它们
@Service
@SuppressWarnings("deprecation")
public class CSVResourceService implements ResourceService {
@Autowired
private WordRepository wordRepository;
@Autowired
private WordRepositoryHelper wordRepositoryHelper;
private static final String HEADER_ID = "id";
private static final String HEADER_VALUE = "value";
private static final String HEADER_CATEGORY = "category";
@Override
public Boolean save(MultipartFile file, Boolean replace) throws Exception {
// some other code
if (replace) {
wordRepositoryHelper.truncateWordTable();
}
//some other code
}
}
关于该问题或建议的任何指导 非常感谢评论中的所有建议。正如你可能已经猜到的,这是我第一次处理内存问题,因为它发生在生产中,我有点恐慌 所以真正的问题不是JPA。这更像是问题和问题的结合。正如一些评论所暗示的那样,我的记忆问题要归咎于好几个候选人:
- JPA
- 提卡
- Opencv
- 特塞拉特
-Xms256m-Xmx512m
,这样您就可以缩小范围,看看该怪谁。它还将限制服务器中的资源李>
1)
(二)
谢谢大家的帮助。你有什么问题吗?你的代码会占用大量内存吗?为什么不在盲目猜测之前使用一些分析工具呢?我想你的项目除了jpa还有很多其他功能。对于内存问题,您的猜测可能是正确的,但请使用分析工具查找确切的负责对象。猜测n个无效的假设可以节省时间。从数据库加载大量数据“JPA”怎么可能是内存泄漏的罪魁祸首?这是一系列的接口!如果你打算声称内存泄漏,请至少提供内存转储请记住:大量内存使用不一定是内存泄漏!为了追踪它们中的任何一个,您绝对必须使用内存分析器,这是一个很好的工具,并且可能在99%的时间内都可以使用。拥有某种类型的自动化来“锻炼”您的应用程序(例如用于web应用的JMeter)也是非常宝贵的。它有助于揭示泄漏和其他内存问题,并证明您已经纠正了它们。
@Service
@SuppressWarnings("deprecation")
public class CSVResourceService implements ResourceService {
@Autowired
private WordRepository wordRepository;
@Autowired
private WordRepositoryHelper wordRepositoryHelper;
private static final String HEADER_ID = "id";
private static final String HEADER_VALUE = "value";
private static final String HEADER_CATEGORY = "category";
@Override
public Boolean save(MultipartFile file, Boolean replace) throws Exception {
// some other code
if (replace) {
wordRepositoryHelper.truncateWordTable();
}
//some other code
}
}