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 サイトの他の関連記事を参照してください。