登录
首页 >  Golang >  Go问答

Golang Getrlimit 返回与 ulimit 的值不匹配

来源:stackoverflow

时间:2024-02-06 19:27:22 329浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Golang Getrlimit 返回与 ulimit 的值不匹配》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我尝试使用golang通过getrlimit函数获取当前的“open fd”限制,这是我的代码:

package main

import (
    "fmt"
    "syscall"
)

func main() {
    lim := syscall.rlimit{}

    err := syscall.getrlimit(syscall.rlimit_nofile, &lim)
    if err != nil {
        panic(err)
    }
    fmt.println("soft:", lim.cur)
    fmt.println("hard:", lim.max)
}

运行此命令将打印:

$ go run main.go
soft: 1048576
hard: 1048576

在这里您可以看到软编号是“1048576”,但是 ulimit -sn 将其打印为“1024”。我也用 c 代码尝试过:

#include 
#include 

int main() {
    struct rlimit rlim;
    if (getrlimit(rlimit_nofile, &rlim) == -1) {
        return -1;
    }
    printf("soft: %lld \n", (long long) rlim.rlim_cur);
    printf("hard: %lld \n", (long long) rlim.rlim_max);
    return 0;
}

编译并运行它还会打印:

soft: 1024
hard: 1048576

所以 golang 为“rlim_max”(硬)打印的数字是正确的,但“rlim_cur”(软)不正确,它应该是“1024”?正如您所看到的,c 代码和 ulimit -sn 命令都打印了“1024”。

这是我的测试环境:

  • 操作系统:ubuntu 22.04 lts x86_64
  • 适用于 amd64 的 golang 1.19.1

我想知道是否有人遇到过同样的问题以及为什么会发生这样的情况?谢谢!


正确答案


这是自 1.19 以来的每个设计,请参阅 https://github.com/golang/go/issues/46279 了解整个讨论。

好了,本文到此结束,带大家了解了《Golang Getrlimit 返回与 ulimit 的值不匹配》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>