1
- #! /usr/ bin/env /sh
1
+ #! /bin/sh
2
2
# vim:sw=2:ts=2:sts=2:et
3
3
4
4
set -eu
5
5
6
6
LC_ALL=C
7
- ME=$( basename " $0 " )
7
+ ME=$( basename " $0 " )
8
8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
9
9
10
10
[ " ${NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE:- } " ] || exit 0
11
11
12
- touch /etc/nginx/nginx.conf 2> /dev/null || { echo >&2 " $ME : ERROR: Cannot modify /etc/nginx/nginx.conf (read-only file system?)" ; exit 0; }
12
+ touch /etc/nginx/nginx.conf 2> /dev/null || {
13
+ echo >&2 " $ME : ERROR: Cannot modify /etc/nginx/nginx.conf (read-only file system?)"
14
+ exit 0
15
+ }
13
16
14
17
ceildiv () {
15
18
num=$1
16
19
div=$2
17
- echo $(( (num + div - 1 ) / div ))
20
+ echo $(( (num + div - 1 ) / div))
18
21
}
19
22
20
23
get_cpuset () {
21
24
cpusetroot=$1
22
25
cpusetfile=$2
23
26
ncpu=0
24
27
[ -f " $cpusetroot /$cpusetfile " ] || return 1
25
- for token in $( tr ' ,' ' ' < " $cpusetroot /$cpusetfile " ) ; do
28
+ for token in $( tr ' ,' ' ' < " $cpusetroot /$cpusetfile " ) ; do
26
29
case " $token " in
27
- * -* )
28
- count=$( seq " $( echo " $token " | tr ' -' ' ' ) " | wc -l )
29
- ncpu=$(( ncpu+ count ))
30
- ;;
31
- * )
32
- ncpu=$(( ncpu+ 1 ))
33
- ;;
30
+ * -* )
31
+ count=$( seq " $( echo " $token " | tr ' -' ' ' ) " | wc -l)
32
+ ncpu=$(( ncpu + count ))
33
+ ;;
34
+ * )
35
+ ncpu=$(( ncpu + 1 ))
36
+ ;;
34
37
esac
35
38
done
36
39
echo " $ncpu "
@@ -41,11 +44,11 @@ get_quota() {
41
44
ncpu=0
42
45
[ -f " $cpuroot /cpu.cfs_quota_us" ] || return 1
43
46
[ -f " $cpuroot /cpu.cfs_period_us" ] || return 1
44
- cfs_quota=$( cat " $cpuroot /cpu.cfs_quota_us" )
45
- cfs_period=$( cat " $cpuroot /cpu.cfs_period_us" )
47
+ cfs_quota=$( cat " $cpuroot /cpu.cfs_quota_us" )
48
+ cfs_period=$( cat " $cpuroot /cpu.cfs_period_us" )
46
49
[ " $cfs_quota " = " -1" ] && return 1
47
50
[ " $cfs_period " = " 0" ] && return 1
48
- ncpu=$( ceildiv " $cfs_quota " " $cfs_period " )
51
+ ncpu=$( ceildiv " $cfs_quota " " $cfs_period " )
49
52
[ " $ncpu " -gt 0 ] || return 1
50
53
echo " $ncpu "
51
54
}
@@ -54,11 +57,11 @@ get_quota_v2() {
54
57
cpuroot=$1
55
58
ncpu=0
56
59
[ -f " $cpuroot /cpu.max" ] || return 1
57
- cfs_quota=$( cut -d' ' -f 1 < " $cpuroot /cpu.max" )
58
- cfs_period=$( cut -d' ' -f 2 < " $cpuroot /cpu.max" )
60
+ cfs_quota=$( cut -d' ' -f 1 < " $cpuroot /cpu.max" )
61
+ cfs_period=$( cut -d' ' -f 2 < " $cpuroot /cpu.max" )
59
62
[ " $cfs_quota " = " max" ] && return 1
60
63
[ " $cfs_period " = " 0" ] && return 1
61
- ncpu=$( ceildiv " $cfs_quota " " $cfs_period " )
64
+ ncpu=$( ceildiv " $cfs_quota " " $cfs_period " )
62
65
[ " $ncpu " -gt 0 ] || return 1
63
66
echo " $ncpu "
64
67
}
@@ -74,59 +77,59 @@ get_cgroup_v1_path() {
74
77
75
78
while IFS= read -r line; do
76
79
case " $needle " in
77
- " cpuset" )
78
- case " $line " in
79
- * cpuset* )
80
- found=$( echo " $line " | cut -d ' ' -f 4,5 )
81
- break
82
- ;;
83
- esac
80
+ " cpuset" )
81
+ case " $line " in
82
+ * cpuset* )
83
+ found=$( echo " $line " | cut -d ' ' -f 4,5)
84
+ break
85
+ ;;
86
+ esac
87
+ ;;
88
+ " cpu" )
89
+ case " $line " in
90
+ * cpuset* ) ;;
91
+ * cpu,cpuacct* | * cpuacct,cpu | * cpuacct* | * cpu* )
92
+ found=$( echo " $line " | cut -d ' ' -f 4,5)
93
+ break
84
94
;;
85
- " cpu" )
86
- case " $line " in
87
- * cpuset* )
88
- ;;
89
- * cpu,cpuacct* |* cpuacct,cpu|* cpuacct* |* cpu* )
90
- found=$( echo " $line " | cut -d ' ' -f 4,5 )
91
- break
92
- ;;
93
- esac
95
+ esac
96
+ ;;
94
97
esac
95
- done << __EOF__
96
- $( grep -F -- ' - cgroup ' /proc/self/mountinfo )
98
+ done << __EOF__
99
+ $( grep -F -- ' - cgroup ' /proc/self/mountinfo)
97
100
__EOF__
98
101
99
102
while IFS= read -r line; do
100
- controller=$( echo " $line " | cut -d: -f 2 )
103
+ controller=$( echo " $line " | cut -d: -f 2)
101
104
case " $needle " in
102
- " cpuset" )
103
- case " $controller " in
104
- cpuset)
105
- mountpoint=$( echo " $line " | cut -d: -f 3 )
106
- break
107
- ;;
108
- esac
105
+ " cpuset" )
106
+ case " $controller " in
107
+ cpuset)
108
+ mountpoint=$( echo " $line " | cut -d: -f 3)
109
+ break
109
110
;;
110
- " cpu " )
111
- case " $controller " in
112
- cpu,cpuacct|cpuacct,cpu|cpuacct|cpu )
113
- mountpoint= $( echo " $line " | cut -d: -f 3 )
114
- break
115
- ;;
116
- esac
111
+ esac
112
+ ;;
113
+ " cpu" )
114
+ case " $controller " in
115
+ cpu,cpuacct | cpuacct,cpu | cpuacct | cpu)
116
+ mountpoint= $( echo " $line " | cut -d: -f 3 )
117
+ break
117
118
;;
119
+ esac
120
+ ;;
118
121
esac
119
- done << __EOF__
120
- $( grep -F -- ' cpu' /proc/self/cgroup )
122
+ done << __EOF__
123
+ $( grep -F -- ' cpu' /proc/self/cgroup)
121
124
__EOF__
122
125
123
126
case " ${found%% * } " in
124
- " /" )
125
- foundroot=" ${found##* } $mountpoint "
126
- ;;
127
- " $mountpoint " )
128
- foundroot=" ${found##* } "
129
- ;;
127
+ " /" )
128
+ foundroot=" ${found##* } $mountpoint "
129
+ ;;
130
+ " $mountpoint " )
131
+ foundroot=" ${found##* } "
132
+ ;;
130
133
esac
131
134
echo " $foundroot "
132
135
}
@@ -140,49 +143,49 @@ get_cgroup_v2_path() {
140
143
[ -r " /proc/self/cgroup" ] || return 1
141
144
142
145
while IFS= read -r line; do
143
- found=$( echo " $line " | cut -d ' ' -f 4,5 )
144
- done << __EOF__
145
- $( grep -F -- ' - cgroup2 ' /proc/self/mountinfo )
146
+ found=$( echo " $line " | cut -d ' ' -f 4,5)
147
+ done << __EOF__
148
+ $( grep -F -- ' - cgroup2 ' /proc/self/mountinfo)
146
149
__EOF__
147
150
148
151
while IFS= read -r line; do
149
- mountpoint=$( echo " $line " | cut -d: -f 3 )
150
- done << __EOF__
151
- $( grep -F -- ' 0::' /proc/self/cgroup )
152
+ mountpoint=$( echo " $line " | cut -d: -f 3)
153
+ done << __EOF__
154
+ $( grep -F -- ' 0::' /proc/self/cgroup)
152
155
__EOF__
153
156
154
157
case " ${found%% * } " in
155
- " " )
156
- return 1
157
- ;;
158
- " /" )
159
- foundroot=" ${found##* } $mountpoint "
160
- ;;
161
- " $mountpoint " | /../* )
162
- foundroot=" ${found##* } "
163
- ;;
158
+ " " )
159
+ return 1
160
+ ;;
161
+ " /" )
162
+ foundroot=" ${found##* } $mountpoint "
163
+ ;;
164
+ " $mountpoint " | /../* )
165
+ foundroot=" ${found##* } "
166
+ ;;
164
167
esac
165
168
echo " $foundroot "
166
169
}
167
170
168
- ncpu_online=$( getconf _NPROCESSORS_ONLN )
171
+ ncpu_online=$( getconf _NPROCESSORS_ONLN)
169
172
ncpu_cpuset=
170
173
ncpu_quota=
171
174
ncpu_cpuset_v2=
172
175
ncpu_quota_v2=
173
176
174
- cpuset=$( get_cgroup_v1_path " cpuset" ) && ncpu_cpuset=$( get_cpuset " $cpuset " " cpuset.effective_cpus" ) || ncpu_cpuset=$ncpu_online
175
- cpu=$( get_cgroup_v1_path " cpu" ) && ncpu_quota=$( get_quota " $cpu " ) || ncpu_quota=$ncpu_online
176
- cgroup_v2=$( get_cgroup_v2_path ) && ncpu_cpuset_v2=$( get_cpuset " $cgroup_v2 " " cpuset.cpus.effective" ) || ncpu_cpuset_v2=$ncpu_online
177
- cgroup_v2=$( get_cgroup_v2_path ) && ncpu_quota_v2=$( get_quota_v2 " $cgroup_v2 " ) || ncpu_quota_v2=$ncpu_online
178
-
179
- ncpu=$( printf " %s\n%s\n%s\n%s\n%s\n" \
180
- " $ncpu_online " \
181
- " $ncpu_cpuset " \
182
- " $ncpu_quota " \
183
- " $ncpu_cpuset_v2 " \
184
- " $ncpu_quota_v2 " \
185
- | sort -n \
186
- | head -n 1 )
177
+ cpuset=$( get_cgroup_v1_path " cpuset" ) && ncpu_cpuset=$( get_cpuset " $cpuset " " cpuset.effective_cpus" ) || ncpu_cpuset=$ncpu_online
178
+ cpu=$( get_cgroup_v1_path " cpu" ) && ncpu_quota=$( get_quota " $cpu " ) || ncpu_quota=$ncpu_online
179
+ cgroup_v2=$( get_cgroup_v2_path) && ncpu_cpuset_v2=$( get_cpuset " $cgroup_v2 " " cpuset.cpus.effective" ) || ncpu_cpuset_v2=$ncpu_online
180
+ cgroup_v2=$( get_cgroup_v2_path) && ncpu_quota_v2=$( get_quota_v2 " $cgroup_v2 " ) || ncpu_quota_v2=$ncpu_online
181
+
182
+ ncpu=$( printf " %s\n%s\n%s\n%s\n%s\n" \
183
+ " $ncpu_online " \
184
+ " $ncpu_cpuset " \
185
+ " $ncpu_quota " \
186
+ " $ncpu_cpuset_v2 " \
187
+ " $ncpu_quota_v2 " |
188
+ sort -n |
189
+ head -n 1)
187
190
188
191
sed -i.bak -r ' s/^(worker_processes)(.*)$/# Commented out by ' " $ME " ' on ' " $( date) " ' \n#\1\2\n\1 ' " $ncpu " ' ;/' /etc/nginx/nginx.conf
0 commit comments