我有一个似乎使用太多内存的应用程序。我一直试图找到源代码。但仍然没有运气。
我已经阅读了几篇指向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(我知道)这样做,所以我得到了persistance对象并使用它来截断表格。
@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
}
}
有关该问题或建议的任何指导。
答案 0 :(得分:3)
非常感谢评论中的所有建议。正如你可能已经猜到的那样,这是我第一次处理内存问题,而且由于它在生产中发生,我有点惊慌失措。
所以真正的问题不是JPA。这更像是问题和问题的结合。就像一些评论所说,我有很多候选人应该为我的记忆问题负责:
这就是我解决问题的方法:
-Xms256m -Xmx512m
,这样你就可以缩小范围,看看应该责怪谁。它还将限制服务器中的资源。 这就是我认为我现在好了。
感谢所有人的帮助。