gpt4 book ai didi

java - 内存泄漏 Spring Boot

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:02:37 29 4
gpt4 key购买 nike

我的应用程序似乎使用了太多内存。一段时间以来,我一直在努力寻找来源。但仍然没有运气。

我读过几篇文章指出 JPA 是 Spring Boot 某些内存问题的罪魁祸首。我只有一个存储库,所以我无法想象这是问题所在。

@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);
}

我有另一个类是删除表的助手。我无法使用 JPA(据我所知)做到这一点,因此我获取了持久性对象并使用它来截断表。

@Service
public class WordRepositoryHelper {

@PersistenceContext(unitName = "default")
private EntityManager entityManager;

@Transactional
public int truncateWordTable() {
final String sql = "truncate table word";
entityManager.createNativeQuery(sql).executeUpdate();
return 1;
}
}

我在这里使用它们。

@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
}
}

关于问题或建议的任何指导。

最佳答案

非常感谢评论中的所有建议。正如您可能已经猜到的那样,这是我第一次处理内存问题,因为它是在生产中发生的,所以我有点 panic 。

所以真正的问题不在于 JPA。它更像是问题和问题的组合。就像一些评论表明我有很多候选人应该为我的内存问题负责:

  • JPA
  • 蒂卡
  • Opencv
  • 正方体

我是这样解决问题的:

  1. 教育。到那里去了解一下这个问题以及如何解决它。以下是我使用的几个链接:
    https://www.toptal.com/java/hunting-memory-leaks-in-java
    https://developers.redhat.com/blog/2014/08/14/find-fix-memory-leaks-java-application/
    https://app.pluralsight.com/player?course=java-understanding-solving-memory-problems
  2. 利用新知识绘制一些图表,了解您的内存情况。相信我,这次探索揭示了一大堆我不知道正在发生的事情。 (比如一些汉字数组,我猜 Tesseract 需要它来进行 OCR)
    enter image description here
    enter image description here
  3. 然后在执行 jar 时使用 -Xms256m -Xmx512m,这样您就可以缩小范围,看看应该责备谁。它还会限制服务器中的资源。
  4. 所有这些让我想到了两个可能导致泄漏和一般问题的原因。 1) Using POI or Tika to extract text, stream-to-stream without loading the entire file in memory
    2) Memory Leak from iterating Opencv frames

就是这样,我想我现在没事了。

感谢大家的帮助。

关于java - 内存泄漏 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46901166/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com