dumamai/java-fpm
0
1#!/bin/sh2# vim:sw=2:ts=2:sts=2:et3 4set -eu5 6LC_ALL=C7ME=$( basename "$0" )8PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin9 10[ "${NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE:-}" ] || exit 011 12touch /etc/nginx/nginx.conf 2>/dev/null || { echo >&2 "$ME: error: can not modify /etc/nginx/nginx.conf (read-only file system?)"; exit 0; }13 14ceildiv() {15 num=$116 div=$217 echo $(( (num + div - 1) / div ))18}19 20get_cpuset() {21 cpusetroot=$122 cpusetfile=$223 ncpu=024 [ -f "$cpusetroot/$cpusetfile" ] || return 125 for token in $( tr ',' ' ' < "$cpusetroot/$cpusetfile" ); do26 case "$token" in27 *-*)28 count=$( seq $(echo "$token" | tr '-' ' ') | wc -l )29 ncpu=$(( ncpu+count ))30 ;;31 *)32 ncpu=$(( ncpu+1 ))33 ;;34 esac35 done36 echo "$ncpu"37}38 39get_quota() {40 cpuroot=$141 ncpu=042 [ -f "$cpuroot/cpu.cfs_quota_us" ] || return 143 [ -f "$cpuroot/cpu.cfs_period_us" ] || return 144 cfs_quota=$( cat "$cpuroot/cpu.cfs_quota_us" )45 cfs_period=$( cat "$cpuroot/cpu.cfs_period_us" )46 [ "$cfs_quota" = "-1" ] && return 147 [ "$cfs_period" = "0" ] && return 148 ncpu=$( ceildiv "$cfs_quota" "$cfs_period" )49 [ "$ncpu" -gt 0 ] || return 150 echo "$ncpu"51}52 53get_quota_v2() {54 cpuroot=$155 ncpu=056 [ -f "$cpuroot/cpu.max" ] || return 157 cfs_quota=$( cut -d' ' -f 1 < "$cpuroot/cpu.max" )58 cfs_period=$( cut -d' ' -f 2 < "$cpuroot/cpu.max" )59 [ "$cfs_quota" = "max" ] && return 160 [ "$cfs_period" = "0" ] && return 161 ncpu=$( ceildiv "$cfs_quota" "$cfs_period" )62 [ "$ncpu" -gt 0 ] || return 163 echo "$ncpu"64}65 66get_cgroup_v1_path() {67 needle=$168 found=69 foundroot=70 mountpoint=71 72 [ -r "/proc/self/mountinfo" ] || return 173 [ -r "/proc/self/cgroup" ] || return 174 75 while IFS= read -r line; do76 case "$needle" in77 "cpuset")78 case "$line" in79 *cpuset*)80 found=$( echo "$line" | cut -d ' ' -f 4,5 )81 break82 ;;83 esac84 ;;85 "cpu")86 case "$line" in87 *cpuset*)88 ;;89 *cpu,cpuacct*|*cpuacct,cpu|*cpuacct*|*cpu*)90 found=$( echo "$line" | cut -d ' ' -f 4,5 )91 break92 ;;93 esac94 esac95 done << __EOF__96$( grep -F -- '- cgroup ' /proc/self/mountinfo )97__EOF__98 99 while IFS= read -r line; do100 controller=$( echo "$line" | cut -d: -f 2 )101 case "$needle" in102 "cpuset")103 case "$controller" in104 cpuset)105 mountpoint=$( echo "$line" | cut -d: -f 3 )106 break107 ;;108 esac109 ;;110 "cpu")111 case "$controller" in112 cpu,cpuacct|cpuacct,cpu|cpuacct|cpu)113 mountpoint=$( echo "$line" | cut -d: -f 3 )114 break115 ;;116 esac117 ;;118 esac119done << __EOF__120$( grep -F -- 'cpu' /proc/self/cgroup )121__EOF__122 123 case "${found%% *}" in124 "/")125 foundroot="${found##* }$mountpoint"126 ;;127 "$mountpoint")128 foundroot="${found##* }"129 ;;130 esac131 echo "$foundroot"132}133 134get_cgroup_v2_path() {135 found=136 foundroot=137 mountpoint=138 139 [ -r "/proc/self/mountinfo" ] || return 1140 [ -r "/proc/self/cgroup" ] || return 1141 142 while IFS= read -r line; do143 found=$( echo "$line" | cut -d ' ' -f 4,5 )144 done << __EOF__145$( grep -F -- '- cgroup2 ' /proc/self/mountinfo )146__EOF__147 148 while IFS= read -r line; do149 mountpoint=$( echo "$line" | cut -d: -f 3 )150done << __EOF__151$( grep -F -- '0::' /proc/self/cgroup )152__EOF__153 154 case "${found%% *}" in155 "")156 return 1157 ;;158 "/")159 foundroot="${found##* }$mountpoint"160 ;;161 "$mountpoint")162 foundroot="${found##* }"163 ;;164 esac165 echo "$foundroot"166}167 168ncpu_online=$( getconf _NPROCESSORS_ONLN )169ncpu_cpuset=170ncpu_quota=171ncpu_cpuset_v2=172ncpu_quota_v2=173 174cpuset=$( get_cgroup_v1_path "cpuset" ) && ncpu_cpuset=$( get_cpuset "$cpuset" "cpuset.effective_cpus" ) || ncpu_cpuset=$ncpu_online175cpu=$( get_cgroup_v1_path "cpu" ) && ncpu_quota=$( get_quota "$cpu" ) || ncpu_quota=$ncpu_online176cgroup_v2=$( get_cgroup_v2_path ) && ncpu_cpuset_v2=$( get_cpuset "$cgroup_v2" "cpuset.cpus.effective" ) || ncpu_cpuset_v2=$ncpu_online177cgroup_v2=$( get_cgroup_v2_path ) && ncpu_quota_v2=$( get_quota_v2 "$cgroup_v2" ) || ncpu_quota_v2=$ncpu_online178 179ncpu=$( 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 )187 188sed -i.bak -r 's/^(worker_processes)(.*)$/# Commented out by '"$ME"' on '"$(date)"'\n#\1\2\n\1 '"$ncpu"';/' /etc/nginx/nginx.conf