필자는 golang 프로그램에서 ulimit -n을 설정하여 전역으로 설정하지 않고 프로그램 내에서 제한 할 수 있도록했습니다.golang 프로그램에서 ulimit -n을 설정하는 방법은 무엇입니까?
발견 된 시스템 호출 setrlimit과 get rlimit가 동일합니다. (http://linux.die.net/man/2/setrlimit)
그러나 같은 샘플 프로그램을 시도 할 때 값을 설정하는 동안 잘못된 인수를 말하는 오류가 발생했습니다.
[email protected] ~/work/odesk/progium/trial $ ./getRlimit
{4294963002032703 0}
Error Setting Rlimit invalid argument
Rlimit Final {4294963002032703 999999}
[email protected] ~/work/odesk/progium/trial $ sudo ./getRlimit
[sudo] password for george:
{4294963002032703 0}
Error Setting Rlimit invalid argument
Rlimit Final {4294963002032703 999999}
[email protected] ~/work/odesk/progium/trial $ uname -a
Linux george-Not-Specified 3.5.0-17-generiC#28-Ubuntu SMP Tue Oct 9 19:32:08 UTC 2012 i686 i686 i686 GNU/Linux
[email protected] ~/work/odesk/progium/trial $
그래서 나는 rlimit 실패 한계를 설정을 얻을 수 있었고, 오류를 반환했습니다 : 얻을
package main
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)
}
출력했다. 값을 다시 가져 왔을 때 MAX 값이 변경되었지만 CUR 값은 그대로 유지됩니다. 이 오류는 내 커널에 문제가 있거나 나쁜 프로그램 일 수 있습니까? 더 많은 정보를 얻고이를 어떻게 처리 할 수 있습니까?
업데이트 : 수정이 이루어진
작품 후.
[email protected] ~/work/odesk/progium/trial $ go build getRlimit.go
[email protected] ~/work/odesk/progium/trial $ ./getRlimit
{1024 4096}
Error Setting Rlimit operation not permitted
Rlimit Final {1024 4096}
[email protected] ~/work/odesk/progium/trial $ sudo ./getRlimit
[sudo] password for george:
{1024 4096}
Rlimit Final {999999 999999}
[email protected] ~/work/odesk/progium/trial $ uname -a
Linux george-Not-Specified 3.5.0-17-generiC#28-Ubuntu SMP Tue Oct 9 19:32:08 UTC 2012 i686 i686 i686 GNU/Linux
[email protected] ~/work/odesk/progium/trial $ go version
go version devel +7c42cfa28e24 Tue Jul 30 14:22:14 2013 +1000 linux/386
내 경우에 작동하지 않는 이유가 있습니까? –
@GeorgeThomas PeterSO가 지적했듯이 : 수퍼 유저 권한으로 애플리케이션을 실행하고 있습니까? – elithrar
두 가지 방법을 시도했지만 여전히 동일했습니다. –