背景:
kubernetes 集群中部署利用,对利用进行压力测试。jmeter 进行压力测试大略是每秒 300 个左右的申请(每分钟 elasticsearch 中采集的申请有 18000 个)。查看日志有 nginx 的 erro log:
然而我的 cpu 内存资源也都没有打满。通过搜索引擎搜寻发现与上面博客的环境根本类似,php-fpm 也是走的 socket:
参见:http://www.bubuko.com/infodetail-3600189.html
解决问题:
批改 net.core.somaxconn
进入本人的 nginx-php 容器查看:
bash-5.0# cat /proc/sys/net/core/somaxconn
128
随机找了一个 work 节点查看主机的 somaxconn:
root@ap-shanghai-k8s-node-1:~# cat /proc/sys/net/core/somaxconn
32768
注:这是一个 tke 集群。参数都是默认的。未进行批改
上面批改一下利用的配置文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: paper-miniprogram
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: paper-miniprogram
template:
metadata:
labels:
app: paper-miniprogram
spec:
containers:
- name: paper-miniprogram
image: ccr.ccs.tencentyun.com/xxxx/paper-miniprogram:{data}
ports:
- containerPort: 80
resources:
requests:
memory: "1024M"
cpu: "1000m"
limits:
memory: "1024M"
cpu: "1000m"
imagePullSecrets:
- name: tencent
---
apiVersion: v1
kind: Service
metadata:
name: paper-miniprogram
labels:
app: paper-miniprogram
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: paper-miniprogram
批改如下:
减少 initContainers 配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: paper-miniprogram
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: paper-miniprogram
template:
metadata:
labels:
app: paper-miniprogram
spec:
containers:
- name: paper-miniprogram
image: ccr.ccs.tencentyun.com/xxxx/paper-miniprogram:{data}
ports:
- containerPort: 80
resources:
requests:
memory: "1024M"
cpu: "1000m"
limits:
memory: "1024M"
cpu: "1000m"
initContainers:
- image: busybox
command:
- sh
- -c
- echo 1000 > /proc/sys/net/core/somaxconn
imagePullPolicy: Always
name: setsysctl
securityContext:
privileged: true
imagePullSecrets:
- name: tencent
---
apiVersion: v1
kind: Service
metadata:
name: paper-miniprogram
labels:
app: paper-miniprogram
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: paper-miniprogram
php-fpm listen.backlog 参数批改
先看一下零碎变量 net.ipv4.tcp_max_syn_backlog 的参数值
cat /proc/sys/net/core/netdev_max_backlog
#OR
sysctl -a|grep backlog
而后查看一下 php 中 listen。backlog 的配置:
511 就先 511 吧不先批改了 如果批改这个值也要特权模式批改一下啊容器中 net.ipv4.tcp_max_syn_backlog 的值?
官网对于 sysctl
kubernetes 官网有 syscl 的用法说明的:https://kubernetes.io/zh/docs/tasks/administer-cluster/sysctl-cluster/
而后这样做的后遗症:
集体感觉特权模式会带来的平安等问题, 还是不喜爱 pod 启用特权模式。
集体感觉比拟好的形式:
- 通过 grafana 看板发现 pod 的资源利用率还是没有那么高。正当调整资源 limits 参数。
- 启用 hpa 程度主动伸缩。
- 综上所述我还想想放弃默认的 net.core.somaxconn=128。而依附更多的正本数去满足高负载。这也是合乎应用容器的思维的思路。
-
要害是很多人认为扩充资源就能够进步并发负载量的思维是不对的. 更应该去调优参数。
对于 php-fpm unix socket and tcp
参见知乎:https://zhuanlan.zhihu.com/p/83958307
一些配置的可供参考:
https://github.com/gaoxt/blog/issues/9
https://blog.csdn.net/pcyph/article/details/46513521