美文网首页程序员
Nginx Unit 安装与性能测试

Nginx Unit 安装与性能测试

作者: jerryyyq | 来源:发表于2018-06-25 12:23 被阅读1次

    安装

    centos

    配置安装源

    在文件夹 /etc/yum.repos.d/ 下创建 unit.repo 文件,内容如下:

    [unit]
    name=unit repo
    baseurl=http://packages.nginx.org/unit/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    

    安装 unit

    $ sudo yum install unit
    $ sudo yum install unit-php unit-python unit-go unit-perl

    ubuntu

    配置 apt-key

    将下面的 key 内容保存到一个文件,例如:nginx_signing.key

    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: GnuPG v2.0.22 (GNU/Linux)
    
    mQENBE5OMmIBCAD+FPYKGriGGf7NqwKfWC83cBV01gabgVWQmZbMcFzeW+hMsgxH
    W6iimD0RsfZ9oEbfJCPG0CRSZ7ppq5pKamYs2+EJ8Q2ysOFHHwpGrA2C8zyNAs4I
    QxnZZIbETgcSwFtDun0XiqPwPZgyuXVm9PAbLZRbfBzm8wR/3SWygqZBBLdQk5TE
    fDR+Eny/M1RVR4xClECONF9UBB2ejFdI1LD45APbP2hsN/piFByU1t7yK2gpFyRt
    97WzGHn9MV5/TL7AmRPM4pcr3JacmtCnxXeCZ8nLqedoSuHFuhwyDnlAbu8I16O5
    XRrfzhrHRJFM1JnIiGmzZi6zBvH0ItfyX6ttABEBAAG0KW5naW54IHNpZ25pbmcg
    a2V5IDxzaWduaW5nLWtleUBuZ2lueC5jb20+iQE+BBMBAgAoAhsDBgsJCAcDAgYV
    CAIJCgsEFgIDAQIeAQIXgAUCV2K1+AUJGB4fQQAKCRCr9b2Ce9m/YloaB/9XGrol
    kocm7l/tsVjaBQCteXKuwsm4XhCuAQ6YAwA1L1UheGOG/aa2xJvrXE8X32tgcTjr
    KoYoXWcdxaFjlXGTt6jV85qRguUzvMOxxSEM2Dn115etN9piPl0Zz+4rkx8+2vJG
    F+eMlruPXg/zd88NvyLq5gGHEsFRBMVufYmHtNfcp4okC1klWiRIRSdp4QY1wdrN
    1O+/oCTl8Bzy6hcHjLIq3aoumcLxMjtBoclc/5OTioLDwSDfVx7rWyfRhcBzVbwD
    oe/PD08AoAA6fxXvWjSxy+dGhEaXoTHjkCbz/l6NxrK3JFyauDgU4K4MytsZ1HDi
    MgMW8hZXxszoICTTiQEcBBABAgAGBQJOTkelAAoJEKZP1bF62zmo79oH/1XDb29S
    YtWp+MTJTPFEwlWRiyRuDXy3wBd/BpwBRIWfWzMs1gnCjNjk0EVBVGa2grvy9Jtx
    JKMd6l/PWXVucSt+U/+GO8rBkw14SdhqxaS2l14v6gyMeUrSbY3XfToGfwHC4sa/
    Thn8X4jFaQ2XN5dAIzJGU1s5JA0tjEzUwCnmrKmyMlXZaoQVrmORGjCuH0I0aAFk
    RS0UtnB9HPpxhGVbs24xXZQnZDNbUQeulFxS4uP3OLDBAeCHl+v4t/uotIad8v6J
    SO93vc1evIje6lguE81HHmJn9noxPItvOvSMb2yPsE8mH4cJHRTFNSEhPW6ghmlf
    Wa9ZwiVX5igxcvaIRgQQEQIABgUCTk5b0gAKCRDs8OkLLBcgg1G+AKCnacLb/+W6
    cflirUIExgZdUJqoogCeNPVwXiHEIVqithAM1pdY/gcaQZmIRgQQEQIABgUCTk5f
    YQAKCRCpN2E5pSTFPnNWAJ9gUozyiS+9jf2rJvqmJSeWuCgVRwCcCUFhXRCpQO2Y
    Va3l3WuB+rgKjsQ=
    =EWWI
    -----END PGP PUBLIC KEY BLOCK-----
    

    将这个 key 添加到 apt
    $ sudo apt-key add nginx_signing.key

    配置安装源

    在文件夹 /etc/apt/sources.list.d/ 下创建 unit.list 文件
    Ubuntu v16.04 填写下面内容:

    deb https://packages.nginx.org/unit/ubuntu/ xenial unit
    deb-src https://packages.nginx.org/unit/ubuntu/ xenial unit
    

    Ubuntu v17.10 填写下面内容:

    deb https://packages.nginx.org/unit/ubuntu/ artful unit
    deb-src https://packages.nginx.org/unit/ubuntu/ artful unit
    

    更新源
    $ sudo apt-get update

    安装 unit

    $ sudo apt-get install unit

    Ubuntu v16.04 执行下面的命令:
    $ sudo apt-get install unit-php unit-python2.7 unit-python3.5 unit-go unit-perl unit-ruby

    Ubuntu v17.10 执行下面的命令:
    $ sudo apt-get install unit-php unit-python2.7 unit-python3.6 unit-go1.8 unit-go1.9 unit-perl unit-ruby

    查看版本号

    $ unitd --version
    此时会显示出 --control 值,可用于后面的通过 unix-socket 进行配置和配置项查看

    启动与停止 unit

    $ sudo service unit start
    $ sudo service unit stop

    配置应用

    在 /etc/unit/ 目录下新建一个 json 格式的配置文件,可以配置多个应用

    {
        "listeners": {
            "*:8100": {
                "application": "php_app"
            },
            "127.0.0.1:8101": {
                "application": "python_app"
            },
            "*:8102": {
                "application": "go_app"
            }
        },
    
        "applications": {
            "php_app": {
                "type": "php",
                "processes": 20,
                "root": "/home/yangyuqi/work/test_yyq_frame",
                "index": "test.php"
            },
            "python_app": {
                "type": "python",
                "processes": 5,
                "user": "yangyuqi",
                "group": "yangyuqi",
                "path": "/home/yangyuqi/work/unit_python_web",
                "module": "test"
            },
            "go_app": {
                "type": "go",
                "processes": 8,
                "working_directory": "/home/yangyuqi/work/unit_go_web",
                "executable": "test"
            }
        }
    }
    

    配置完成,重新 load
    $ sudo service unit loadconfig
    如果还不生效,那么重启 unit 服务
    $ sudo service unit restart

    可以通过命令行查看配置
    $ sudo curl --unix-socket /xxxxxxxxxxxx/control.unit.sock http://localhost/config/
    其中的 unix-socket 值需要填写 unitd --version 显示出的 --control 的值

    unit-php

    不再需要 php-fpm,可以关闭 php-fpm 服务后尝试访问,会看到依然可以访问。
    $ sudo service php7.0-fpm stop

    每次改完文件不需要重启 unit 就能生效,代码最简单,更新最快捷

    unit-python

    需要 bottle
    $ sudo pip install bottle

    编写 test.py 文件
    $ cd /home/yangyuqi/work/unit_python_web
    $ vim test.py

    from bottle import Bottle
    
    app = Bottle()
    
    @app.get('/')
    def index():
        return 'unit python OK'
    
    application = app
    

    每次改完文件需要重启 unit 才能生效
    $ sudo service unit restart

    unit-go

    需要 nginx/unit,需要下载和编译
    $ git clone https://github.com/nginx/unit.git $GOPATH/src/github.com/nginx/unit
    $ cd $GOPATH/src/github.com/nginx/unit
    $ git checkout tags/1.1 注意这个版本号必须跟安装的 unit 版本号一致,可以使用 unitd --version 查看
    $ ./configure
    $ ./configure go
    $ make go-install

    编写 test.go
    $ cd /home/yangyuqi/work/unit_go_web
    $ vim test.go

    package main
    
    import (
        "net/http"
        "nginx/unit"
    )
    
    func handler(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("unit go OK"))
    }
    
    func main() {
        http.HandleFunc("/", handler)
    
        unit.ListenAndServe(":8089", nil)    
    }
    

    编译 test 模块
    $ cd /home/yangyuqi/work/unit_go_web
    $ go build -o test test.go

    每次编译完,需要重启 unit 才能生效
    $ sudo service unit restart

    性能测试

    每请求基准为:计算 1 到 100 的阶乘
    测试命令为:/usr/local/apache2/bin/ab -n 20000 -c 1000 http://127.0.0.1:8102/;

    每类 unit 都设置 processes 为 1

    unit-php

    Document Length: 0 bytes
    Time taken for tests: 0.946 seconds
    Total transferred: 2660000 bytes
    HTML transferred: 0 bytes
    Requests per second: 21139.93 [#/sec] (mean)
    Time per request: 47.304 [ms] (mean)

    unit-python

    Document Length: 36 bytes
    Time taken for tests: 1.091 seconds
    Total transferred: 3468894 bytes
    HTML transferred: 788894 bytes
    Requests per second: 18325.34 [#/sec] (mean)
    Time per request: 54.569 [ms] (mean)

    unit-go

    Document Length: 194 bytes
    Time taken for tests: 1.023 seconds
    Total transferred: 6228894 bytes
    HTML transferred: 3948894 bytes
    Requests per second: 19548.97 [#/sec] (mean)
    Time per request: 51.154 [ms] (mean)

    每类 unit 都设置 processes 为 8

    unit-php

    Document Length: 0 bytes
    Time taken for tests: 1.010 seconds
    Total transferred: 2660000 bytes
    HTML transferred: 0 bytes
    Requests per second: 19810.04 [#/sec] (mean)
    Time per request: 50.479 [ms] (mean)

    unit-python

    Document Length: 36 bytes
    Time taken for tests: 1.021 seconds
    Total transferred: 3451144 bytes
    HTML transferred: 771144 bytes
    Requests per second: 19595.62 [#/sec] (mean)
    Time per request: 51.032 [ms] (mean)

    unit-go

    Document Length: 194 bytes
    Time taken for tests: 0.947 seconds
    Total transferred: 6220000 bytes
    HTML transferred: 3940000 bytes
    Requests per second: 21117.52 [#/sec] (mean)
    Time per request: 47.354 [ms] (mean)

    Gin 性能测试

    安装

    $ go get -u github.com/gin-gonic/gin
    安装完毕 可以检查下是否有 Gin 的包
    $ ll $GOPATH

    每请求基准为:计算 1 到 100 的阶乘
    测试命令为:/usr/local/apache2/bin/ab -n 20000 -c 1000 http://127.0.0.1:9090/;

    Document Length: 183 bytes
    Time taken for tests: 0.953 seconds
    Total transferred: 6088911 bytes
    HTML transferred: 3728911 bytes
    Requests per second: 20991.14 [#/sec] (mean)
    Time per request: 47.639 [ms] (mean)

    相关文章

      网友评论

        本文标题:Nginx Unit 安装与性能测试

        本文链接:https://www.haomeiwen.com/subject/gmxyyftx.html