Nginx Unit 安装与性能测试

安装

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)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容