gpt4 book ai didi

java - 如何发现我的应用程序在哪里打开更多文件(打开文件太多)?

转载 作者:行者123 更新时间:2023-12-02 05:08:13 26 4
gpt4 key购买 nike

我编写了一个脚本,每 10 分钟执行一次,当我的 Java 应用程序上打开的文件大于 10000 个时,它将执行 jmap 命令来为我提供堆转储。

我的目的是发现我的应用程序的哪个类没有关闭文件,或者哪里存在内存泄漏,或者为什么我在执行 20 小时后收到“打开的文件太多”消息。

这是我的脚本。有人有其他方法或工具来发现我的应用程序没有关闭文件的位置吗?非常感谢!

#!/bin/bash

rm openfiles.log
flag=1
for (( ; ; ))
do
sleep 10m
files=`ps -A x |grep iscsi | awk '{print $1}' | xargs -I '{}' ls /proc/29192/fd | wc -l`
msg="open files: $files - date: `date`"
echo "$msg - infinite loops [ hit CTRL+C to stop]"
echo $msg >> openfiles.log

if [ $files -gt 10000 ] && [ $flag -eq 1 ]
then
jmap -F -dump:file=heapdump.hprof 29192
flag=0;
echo "############################################ heapdump of 29192" >> openfiles.log
fi
echo "" >> openfiles.log
done

最佳答案

看看File Leak Detector由 Jenkins (Jenkins) 成名的川口浩介 (Kohsuke Kawaguchi) 撰写。它是一个附加到 java 进程的 java 代理。

还有其他方法可以通过 FindBugs/PMD 等扫描它们。我会看看 SonarQube 。有专门关于不关闭资源的规则。

关于java - 如何发现我的应用程序在哪里打开更多文件(打开文件太多)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27574560/

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