gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:05:22 26 4
gpt4 key购买 nike

我们的 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(...) 进行 native 调用:

/* -- Disk usage -- */
public native long getSpace(File f, int t);

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

https://github.com/openjdk/jdk/blob/master/src/java.base/unix/native/libjava/UnixFileSystem_md.c


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

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

如您所见,如果您使用的是 MACOSX,则 C 库函数 statfs被调用,否则函数 statvfs64被称为。

关于java - 需要有关 java.io.UnixFileSystem.getspace 方法的信息,执行哪个 unix 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57992723/

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