这是系统资源限制,通常单进程不能超过 1024,我使用cgo来设置,代码如下:
package main /* #include <stdio.h> #include <sys/time.h> #include <sys/resource.h> int rlimit_init() { printf("setting rlimit\n"); struct rlimit limit; if (getrlimit(RLIMIT_NOFILE,&limit) == -1) { printf("getrlimit error\n"); return 1; } limit.rlim_cur = limit.rlim_max = 50000; if (setrlimit(RLIMIT_NOFILE,&limit) == -1) { printf("setrlimit error\n"); return 1; } printf("set limit ok\n"); return 0; } */ import "C" func main() { C.rlimit_init() }
或者使用 syscall 包
var rlim syscall.Rlimit err := syscall.Getrlimit(syscall.RLIMIT_NOFILE,&rlim) if err != nil { fmt.Println("get rlimit error: " + err.Error()) os.Exit(1) } rlim.Cur = 50000 rlim.Max = 50000 err = syscall.Setrlimit(syscall.RLIMIT_NOFILE,&rlim) if err != nil { fmt.Println("set rlimit error: " + err.Error()) os.Exit(1) }
使用 go build 编译后,需要以 root 权限运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。