更新: | 2015-03-14 |
---|---|
作者: | @voluntas |
バージョン: | 0.0.3 |
URL: | http://voluntas.github.io/ |
Contents
PyPy の本番での使用を目的とする人向けの資料
Python の高速な実装である PyPy を使用し Django を使ったウェブアプリの高速を行う。
この資料では PyPy への移行と検証を行うための知識をまとめておく。
性能に関してはこれを見てみるとよい、一通りの項目において CPython よりも早い。
PyPy の Django に関してはこちら。
最近 2015-02 のベンチだと、 10 倍程度早い。
引用:
$ go version go version go1.4.1 linux/amd64 $ time go build scomb.go CPU: 0.14s Real: 0.17s RAM: 30428KB $ time ./scomb CPU: 11.45s Real: 11.54s RAM: 251628KB $ python --version Python 3.4.2 $ time python scomb.py CPU: 121.33s Real: 122.06s RAM: 641844KB $ pypy --version Python 2.7.8 (c6ad44ecf5d8, Nov 18 2014, 18:04:31) [PyPy 2.4.0 with GCC 4.9.2] $ time pypy scomb.py CPU: 14.72s Real: 14.97s RAM: 522080KB
実際に検証を行う場合の構成であって、オススメの構成とかでは無い
- Ubuntu 14.04 64 bit
- AWS EC2 c4 系を想定
- limits.conf とかその辺
- nofile を増やす
- sysctl.conf
- somaxconn を増やす
- Nginx 1.7.10
- nginx news
- mainline を使用する
- uWSGI master
- PyPy 2.5
- PyPy - Welcome to PyPy
- Ubuntu 14.04 用のバイナリファイルがあるのでそれを使う、独自ビルドは行わない
- 一度性能検証した後に独自でビルドと比較するのはあり
- Django 1.7.6
- PyMySQL 0.6.6 or master
- MySQL 5.6
- AWS RDS を想定
- Redis
- Redis
- ElastiCache Redis を想定
- redis-py
- Locust
PyPy は C 拡張だと逆に遅くなる事があるので、Pure Python ライブラリを使用する
PyMySQL を使う
@methane が取ったベンチマークが参考になる
URL: | https://gist.github.com/methane/b5813669e9dbd0c321bd |
---|
PyPy 2.5 (PyMySQL) と CPython (mysqlclient) ではほとんど差がなさそうなので、気にしなくて良いと思う。
PyPy 標準の json ライブラリを使う
URL: | https://gist.github.com/voluntas/05482e373baad5d769eb |
---|---|
参考: | http://morepypy.blogspot.jp/2011/10/speeding-up-json-encoding-in-pypy.html |
簡単なベンチマークを取った。PyPy 内蔵 json が圧倒的に早い。
CPython JSON Benchmark 2.7.9 (default, Dec 11 2014, 02:36:08) [GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] ----------------------------- ENCODING simplejson: 0.281742s cjson: 0.483193s ujson: 0.21507s jsonlib: 0.409993s json: 0.732388s yajl: 0.395648s DECODING simplejson: 0.540883s cjson: 0.356611s ujson: 0.215889s jsonlib: 0.258306s json: 0.35897s yajl: 0.394774s PyPy JSON Benchmark 2.7.8 (10f1b29a2bd21f837090286174a9ca030b8680b2, Feb 05 2015, 07:09:36) [PyPy 2.5.0 with GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] ----------------------------- ENCODING json: 0.176226s simplejson: 1.230522s DECODING json: 0.342462s simplejson: 2.074411s
URL: | https://bitbucket.org/pypy/numpy.git |
---|
PyPy が提供している PyPy 用の NumPy を使う。
未確定
URL: | https://pypi.python.org/pypi/redis/ |
---|
parser に hiredis (C 拡張) を使わないようにするのがいいのかどうか。
バージョン: | 2.1 (master) |
---|
uWSGI の設定ファイル。Nginx との通信は Unix Domain Socket を使う。
.. todo:: 後でサンプルっぽいのを作る
[uwsgi] processes = 1 enable-threads = False single-interpreter = True projectname = projectdomain = base = uid = gid = chmod-socket = 666 chown-socket = chdir = %(base) module = wsgi:application master = True pidfile = vacuum = True env = socket = /tmp/uwsgi.sock logto = pypy-home = pypy-wsgi-file = stats = /tmp/uwsgi_stats.socket
バージョン: | 1.6.x |
---|
後で
後で
- http://newrelic.com/
- https://docs.newrelic.com/docs/agents/python-agent/hosting-mechanisms/python-agent-uwsgi