需要关于java.io.UnixFileSystem.getspace方法的信息,执行哪个unix命令?

需要关于java.io.UnixFileSystem.getspace方法的信息,执行哪个unix命令?,java,unix,filesystems,Java,Unix,Filesystems,我们的Spring boot应用程序在生产Unix环境中挂起。在获得线程转储后,我们能够发现UnixFileSystem的getSpace方法被锁定。有谁能帮助我使用当java调用getSpace方法时调用的Unix命令吗 http-nio-8080-exec-1" - Thread t@45 java.lang.Thread.State: RUNNABLE at java.io.UnixFileSystem.getSpace(Native Method) at java.io.File.

我们的Spring boot应用程序在生产Unix环境中挂起。在获得线程转储后,我们能够发现UnixFileSystem的getSpace方法被锁定。有谁能帮助我使用当java调用getSpace方法时调用的Unix命令吗

   http-nio-8080-exec-1" - Thread t@45
java.lang.Thread.State: RUNNABLE
at java.io.UnixFileSystem.getSpace(Native Method)
at java.io.File.getUsableSpace(File.java:1885)

基本上是在java.io.UnixFileSystem中对getSpace(…)进行本机调用:

此本机方法最终通过JNI调用JDK存储库文件中定义的方法:


在该文件的第466行,您可以找到以下实现(为了简洁起见,省略了if/else语句中的部分):


如您所见,如果您使用MACOSX,则会调用C库函数,否则会调用该函数。

这里有一个问题与您的问题类似:它有两个向上投票的答案,因此可能会对您有所帮助。此外,文件位于何处?本地文件系统或NFS或其他文件位于NFS。我们的应用程序所在的linux服务器似乎运行不正常,这帮助我找到了根本原因。我可以假设dfunix命令在内部调用statvfs64吗?不,df命令使用的调用与JDK调用不完全相同(尽管我认为它们最终归结为几乎相同的系统调用)。如果你感到勇敢,你可以看看!最后,您将找到实用程序的main()函数。
/* -- Disk usage -- */
public native long getSpace(File f, int t);
JNIEXPORT jlong JNICALL
Java_java_io_UnixFileSystem_getSpace(JNIEnv *env, jobject this,
                                    jobject file, jint t)
{
    jlong rv = 0L;

    WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
#ifdef MACOSX
        struct statfs fsstat;
#else
        struct statvfs64 fsstat;
        int res;
#endif
        memset(&fsstat, 0, sizeof(fsstat));
#ifdef MACOSX
        if (statfs(path, &fsstat) == 0) {
            switch(t) {
                // omitted
            }
        }
#else
        RESTARTABLE(statvfs64(path, &fsstat), res);
        if (res == 0) {
            switch(t) {
                // omitted
            }
        }
#endif
    } END_PLATFORM_STRING(env, path);
    return rv;
}