前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kuberntes中Sysctl中的配置(php-fpm并发只能300)

Kuberntes中Sysctl中的配置(php-fpm并发只能300)

原创
作者头像
对你无可奈何
修改2021-08-30 14:10:57
6810
修改2021-08-30 14:10:57
举报
文章被收录于专栏:运维专栏

背景:

kubernetes集群中部署应用,对应用进行压力测试。jmeter进行压力测试大概是每秒300个左右的请求(每分钟elasticsearch中采集的请求有18000个)。查看日志有nginx的erro log:

7dd81543f00530fe566f1ca63e8c334.png
7dd81543f00530fe566f1ca63e8c334.png

但是我的cpu 内存资源也都没有打满。通过搜索引擎搜索发现与下面博客的环境基本相似,php-fpm也是走的socket:

image.png
image.png

参见:http://www.bubuko.com/infodetail-3600189.html

解决问题:

修改net.core.somaxconn

进入自己的nginx-php容器查看:

代码语言:txt
复制
bash-5.0# cat /proc/sys/net/core/somaxconn
128

随机找了一个work节点查看主机的somaxconn:

代码语言:txt
复制
root@ap-shanghai-k8s-node-1:~# cat /proc/sys/net/core/somaxconn
32768

注:这是一个tke集群。参数都是默认的。未进行修改

下面修改一下应用的配置文件:

代码语言:txt
复制
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配置

代码语言:txt
复制
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的参数值

代码语言:txt
复制
cat /proc/sys/net/core/netdev_max_backlog
#OR
sysctl -a|grep backlog
image.png
image.png

然后查看一下php中listen。backlog的配置:

image.png
image.png

511就先511吧不先修改了 如果修改这个值也要特权模式修改一下啊容器中net.ipv4.tcp_max_syn_backlog的值?

官方关于sysctl

kubernetes官方有syscl的用法说明的:https://kubernetes.io/zh/docs/tasks/administer-cluster/sysctl-cluster/

然后这样做的后遗症:

个人觉得特权模式会带来的安全等问题,还是不喜欢pod启用特权模式。

个人觉得比较好的方式:

  1. 通过grafana看板发现pod的资源利用率还是没有那么高。合理调整资源limits参数。
image.png
image.png
image.png
image.png
  1. 启用hpa 水平自动伸缩。
  2. 综上所述我还想想保持默认的net.core.somaxconn=128。而依靠更多的副本数去满足高负载。这也是符合使用容器的思想的思路。
  3. 关键是很多人认为扩大资源就可以提高并发负载量的思想是不对的.更应该去调优参数。关于php-fpm unix socket and tcp
    image.png
    image.png
image.png
image.png

参见知乎:https://zhuanlan.zhihu.com/p/83958307

image.png
image.png

一些配置的可供参考:

https://github.com/gaoxt/blog/issues/9

https://blog.csdn.net/pcyph/article/details/46513521

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景:
  • 解决问题:
    • 修改net.core.somaxconn
      • php-fpm listen.backlog参数修改
        • 官方关于sysctl
          • 然后这样做的后遗症:
          • 个人觉得比较好的方式:
          • 一些配置的可供参考:
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档