“文件可能被截断。需要至少%ld大小,但大小为%ld”。任何人都可以帮我解释如何调用此消息?当我尝试收集内核跟踪时,我看到了这条消息。任何人都可以解释为什么当我尝试收集内核跟踪时会发生这种情况?
我注意到的另一件事是,当我第一次看到上面的消息时,我尝试收集内核跟踪。当我尝试再次立即收集时,我能够收集日志。但是当我在> 5分钟后再次尝试收集时,我看到了上述信息。
答案 0 :(得分:0)
好的,当您尝试一次性获取/收集大量信息时,内核的行为就是这样。
一旦说过,在你的情况下你需要再次调用你所做的动作,所以内核明白你真的想要显示那些巨大的信息。这就是为什么你能够在第二次尝试中收集内核跟踪的原因。
如果没有弄错的话,你实际上在做的是调用一个read()系统调用,它将尝试读取并从fd开始计算字节,从buf开始计入缓冲区。
正如您可以从Linux内核源代码中读取read_write.c,rw_verify_area
函数不喜欢巨大的counts
。因此,它将它们限制为一般适合int
的东西。所以它不必一直进行范围检查。
<强> TL; DR 强>
你到那里,并不是一个错误,很可能是不的一个功能让内核在用户错误地打开巨大的文件。此限制由Linux内核中的rw_verify_area
函数创建。
因此,它至少要调用两次读取系统调用来获取您的数据。