【发布时间】:2021-01-14 07:25:00
【问题描述】:
我的问题是:如果我不断地调用这个命令(例如每秒 50 次),Linux 系统中的“stat”命令是否会消耗过多的 CPU?
问题是这样来的:
我正在用 Java 编写程序,它经常调用 File.length() 方法。我注意到 CPU 使用率很快就达到了 20%(非常高)。
我检查了 File.length() 的源代码,它使我进入了非常深层次的文件系统,我看到源代码是这样的:
#include <sys/stat.h>
...
#define stat64 stat
...
// Android-changed: Name changed because of added thread policy check
JNIEXPORT jlong JNICALL
Java_java_io_UnixFileSystem_getLength0(JNIEnv *env, jobject this,
jobject file)
{
jlong rv = 0;
WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
struct stat64 sb;
if (stat64(path, &sb) == 0) {
rv = sb.st_size;
}
} END_PLATFORM_STRING(env, path);
return rv;
}
它看起来像是在系统中使用“stat”命令。 我检查了 stat 的手册页:
这些函数返回有关文件的信息。文件本身不需要权限,但是在 stat() 和 lstat() 的情况下 - 需要对指向文件的路径中的所有目录具有执行(搜索)权限。
由于它不需要读取权限,我想知道我是否可以断定它不打开文件并读取内容,因此应该消耗很少的CPU?
在哪里可以看到命令“stat”的实际实现?
任何想法都会有所帮助,谢谢!
【问题讨论】:
标签: java linux file linux-kernel filesystems