-
Notifications
You must be signed in to change notification settings - Fork 3
/
info_linux.go
75 lines (66 loc) · 1.69 KB
/
info_linux.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package osKit
import (
"context"
"github.com/richelieu-yang/chimera/v3/src/cmd/cmdKit"
"github.com/richelieu-yang/chimera/v3/src/core/strKit"
"strconv"
)
// GetPidMax 获取: 系统的pid最大值(作为系统范围内 进程 和 线程 总数的限制).
/*
PS:
(1) 大多数Linux上的默认值: 32768
32位系统: 最大值为 32768
64位系统: 任何小于等于 2^22(PID_MAX_LIMIT,约 400 万)的值
命令:
cat /proc/sys/kernel/pid_max
sysctl kernel.pid_max
*/
func GetPidMax() (int, error) {
str, err := cmdKit.ExecuteToString(context.TODO(), "sh", "-c", "cat /proc/sys/kernel/pid_max")
if err != nil {
return 0, err
}
str = strKit.TrimSpace(str)
i, err := strconv.Atoi(str)
if err != nil {
return 0, err
}
return i, nil
}
// GetThreadsMax 获取: 系统的最大线程数.
/*
命令:
cat /proc/sys/kernel/threads-max
sysctl kernel.threads-max
*/
func GetThreadsMax() (int, error) {
str, err := cmdKit.ExecuteToString(context.TODO(), "sh", "-c", "cat /proc/sys/kernel/threads-max")
if err != nil {
return 0, err
}
str = strKit.TrimSpace(str)
i, err := strconv.Atoi(str)
if err != nil {
return 0, err
}
return i, nil
}
// GetMaxMapCount 获取: 一个进程可以拥有的最大内存映射区域数量(间接限制了线程数).
/*
PS: @return 间接限制了线程数,因为每个线程都需要一些内存映射区域.
命令:
cat /proc/sys/vm/max_map_count
sysctl vm.max_map_count
*/
func GetMaxMapCount() (int, error) {
str, err := cmdKit.ExecuteToString(context.TODO(), "sh", "-c", "cat /proc/sys/vm/max_map_count")
if err != nil {
return 0, err
}
str = strKit.TrimSpace(str)
i, err := strconv.Atoi(str)
if err != nil {
return 0, err
}
return i, nil
}