ホームページ >バックエンド開発 >Golang >Golang を使用して ulimit -n を効果的に設定するにはどうすればよいですか?

Golang を使用して ulimit -n を効果的に設定するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 03:53:02408ブラウズ

How to configure ulimit -n effectively using Golang?

Golang プログラムから ulimit -n を設定するには?

システム管理における一般的なタスクは、リソースの使用量を制御するために ulimit を設定することです。オープン ファイル記述子の最大数を設定するには (ulimit -n)、setrlimit および getrlimit システム コールを使用できます。

<code class="go">import (
    "fmt"
    "syscall"
)

func main() {
    var rLimit syscall.Rlimit

    err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
    if err != nil {
        fmt.Println("Error Getting Rlimit ", err)
    }
    fmt.Println(rLimit)

    rLimit.Max = 999999
    rLimit.Cur = 999999

    err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
    if err != nil {
        fmt.Println("Error Setting Rlimit ", err)
    }

    err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
    if err != nil {
        fmt.Println("Error Getting Rlimit ", err)
    }
    fmt.Println("Rlimit Final", rLimit)
}</code>

出力の理解:

<code class="Bash">$ uname -a
Linux peterSO 3.8.0-26-generic #38-Ubuntu SMP Mon Jun 17 21:43:33 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ go build rlimit.go
$ ./rlimit
{1024 4096}
Error Setting Rlimit operation not permitted
Rlimit Final {1024 4096}
$ sudo ./rlimit
[sudo] password for peterSO:
{1024 4096}
Rlimit Final {999999 999999}</code>

出力には、初期リソース制限、制限の設定に失敗した試み、および sudo でプログラムを実行した後の最終制限が表示されます (特権ユーザーはハード制限を変更できるため)。

潜在的な問題:

sudo を使用せずに制限を設定しようとすると、「操作が許可されていません」というエラーが発生する可能性があることに注意してください。また、提供された回答に記載されているように、Go バージョンを更新して、Linux 32 ビット ディストリビューションの Getrlimit および Setrlimit のバグ修正が含まれていることを確認してください。

以上がGolang を使用して ulimit -n を効果的に設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。