zoukankan      html  css  js  c++  java
  • docker 部署 php-fpm nginx 502 (Resource temporarily unavailable)

    docker php-fpm Resource temporarily unavailable

    环境:

    nginx + php-fpm
    centos xxx
    docker xxx

    前提是php-fpm 走的是socket,tcp不用有这问题
    
    切入docker 用ab 压测300  发现有失败的请求nginx erro:
    2020/06/17 17:49:11 [error] 23#0: *14896 connect() to unix:/dev/shm/php-cgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream, 
    client: 172.17.0.1, server: _, request: "GET / HTTP/1.0", upstream: "fastcgi://unix:/dev/shm/php-cgi.sock:", host: "127.0.0.1:9999"
    
    

    查看:cat /proc/sys/net/core/somaxconn

    解决方式:

    找了一堆文档没找到与docker有关的Resource temporarily unavailable

    1、docker run --sysctl net.core.somaxconn=32768 nginx-php-fpm
    2、php-fpm  listen.backlog =-1  或者 32768
    
    ##-1表示 用系统的 值 ,
    操作系统默认是128
    docker默认也是128
    

    如果docker 用的net 是host 不需要设置,是直接走的宿主机的。

    net.core.somaxconn是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限。backlog是socket的监听队列,当一个请求(request)尚未被处理或建立时,他会进入backlog。而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。

    配置如下说明:

    https://docs.docker.com/engine/reference/commandline/run/


    Kubernetes Pod中的内核参数调整

    下面原文转:https://blog.csdn.net/lwlfox/article/details/104681603
    这块就复杂 一点:

    背景
    使用uwsgi部署了一个django的应用,并且使用Kubernetes来运行,但是运行以后老是报如下的错误,后来在网上查询了,是一个系统内核参数(net.core.somaxconn)太小了,默认是128.所以需要将它调整大一些。

    uwsgi_proto_uwsgi_parser(): Resource temporarily unavailable [proto/uwsgi.c line 40]

    简介
    容器的系统内存参数不是通过echo 一个值到指定的文件,然后sysctl -p 就生效了。在docker 中可以使用 如下的命令来调整

    docker run --sysctl net.core.somaxconn=1000 nginx
    

    但是这K8S中,步骤稍微要复杂一点,主要是还需要修改kubelet的启动参数。

    步骤
    1. 修改kubelet的service文件

    vi /etc/systemd/system/kubelet.service ,在启动命令中添加 --allowed-unsafe-sysctls=net.*

    [root@ai-test-k8s07 ~]# cat /etc/systemd/system/kubelet.service
    
    [Unit]
    Description=Kubernetes Kubelet
    Documentation=https://github.com/GoogleCloudPlatform/kubernetes
     
    [Service]
    WorkingDirectory=/var/lib/kubelet
    ExecStartPre=/bin/mount -o remount,rw '/sys/fs/cgroup'
    ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service
    ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service
    ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/memory/system.slice/kubelet.service
    ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/pids/system.slice/kubelet.service
    ExecStart=/opt/kube/bin/kubelet 
      --config=/var/lib/kubelet/config.yaml 
      --cni-bin-dir=/opt/kube/bin 
      --cni-conf-dir=/etc/cni/net.d 
      --hostname-override=10.215.0.24 
      --kubeconfig=/etc/kubernetes/kubelet.kubeconfig 
      --network-plugin=cni 
      --pod-infra-container-image=mirrorgooglecontainers/pause-amd64:3.1 
      --root-dir=/var/lib/kubelet 
      --v=2 
      --allowed-unsafe-sysctls=net.*
    Restart=always
    RestartSec=5
     
    [Install]
    WantedBy=multi-user.target
    
    

    2. 重新启动kubelet

    systemctl daemon-reload && systemctl restart kubelet
    3. 在Pod中添加内存参数,我是直接在Deployment里面改,securityContext 这个里面定义需要修改的内核参数,如果有多个,就在sysctls下面添加就可以。

    nginx.yaml
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels: 
        app: nginx
     
    spec: 
      selector:
        matchLabels:
          app: nginx
      replicas: 1
      template: 
        metadata:
          labels:
            app: nginx
        spec:
          securityContext:
            sysctls:
            - name: net.core.somaxconn
              value: "1000"
            - name: net.ipv4.tcp_keepalive_time
              value: "1200"
          containers:
          - name: nginx
            image: nginx
            imagePullPolicy: IfNotPresent
            ports:
              - containerPort: 80
    

    4. 运行这个Deployment

    kubectl apply -f nginx.yaml
    

    5. 进入容器查看内核参数

    [root@master ~]# kubectl exec -it nginx-57b5f658d-44nq4 bash
    root@nginx-57b5f658d-44nq4:/# cat /proc/sys/net/core/somaxconn
    1000
    
    

    其它的k8s文章:

    https://yq.aliyun.com/articles/603745?utm_content=m_1000003707

  • 相关阅读:
    更改Ubuntu默认python版本的方法
    hdu 5656 CA Loves GCD(dp)
    hdu 5655 CA Loves Stick
    hdu 5650 so easy (异或)
    2016.3.28
    Android 之 ExpandableListView 的使用
    Android之字符串的拆分-split
    Android之SAX解析XML
    hdu 5642 King's Order(数位dp)
    hdu 5641 King's Phone(暴力模拟题)
  • 原文地址:https://www.cnblogs.com/Qing-840/p/13163082.html
Copyright © 2011-2022 走看看