迁址 Vultr

2017.11.26 把主机自DigitalOcean 上迁至Vultr上,走东京线路电信很繁忙,于是试了试欧洲,效果很好。下载可达5MB/s,这着实叫人兴奋了。

2017.10.17 重新启用

时隔五年,经历了种种之后,我又决定重写启用技术博客系统。在这五年,更多的是寻找,而今天我依然在寻找,不管如何吧,只用Evernote写自己的东西显然是不够用的,仍然还需要一片天地记录、分享一些心得给自己,也给大家。

Tinyboat

小诗

岸边的叶子,绿了。
天边的云, 淡了。
风吹过来,你的消息。
我总是忍不住想起。

Nginx ssl 测试工具及报告

缘起:

近几日,公司接入facebook 的游戏,要求所有的数据走SSL通道,找到测试工具 ab, curl-loader

 

1.  ab

ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server. It is designed to give you an impression of how your current Apache installation performs. This especially shows you how many requests per second your Apache installation is capable of serving.

ab -n request_number -c concurrent number

ab -t 120 -n 10000000 -c 250 URL

Request data: 18K

Result:

过程:在测试初期,ab 没有加 -k (keep-alive 参数),结果每次请求,都是短连接,也就是说每次请求都需求对证书进行加密解密,CPU一下子暴到了 90%以上,期间换过3台Server 都是RPS均在 2000-4000 之间徘徊。

将测试参数改为长连接测试后,系统CPU 有明显的提升,但是还是在6000RPS左右。未能达到要求。

将较高安全级别的加密从Nginx 的SSL 解密过程中剔除后,CPU 的的Load就降了下来主要参数就是有 ssl_ciphers HIGH:!aNULL:!MD5:!kEDH;

调试之后的结果,非常满意:

90% time  per request 50 以下,并发2000 时,RPS 达到了 4万+ 以下是具体的测试数据:

Duration(s) Number of Client concurrent numbers per client Succeed request/second Complete request Number of Failed request CPU Core cpuMHZ notes
300s 8 250 43215/sec 12965039 119 16 44.30%
300s 8 500 45640/sec 13693073 1148 16 45.00%
300s 8 250 43202/sec 12960970 144 16 Openssl 1.0.0e nginx 1.1.0

 

2. curl-loader

ab的工具固然很好,但是有一个缺陷,就是每次请求,没有sleep time interval, 这样并不能很好的保证数据的准确性,所以,又找了另一个测试工具,curl-loader. 这个工具十分强大,我只用了小小的一部分功能。

基本安装:

URL: http://superb-sea2.dl.sourceforge.net/project/curl-loader/curl-loader/curl-loader-0.53/curl-loader-0.53.tar.bz2

wget http://superb-sea2.dl.sourceforge.net/project/curl-loader/curl-loader/curl-loader-0.53/curl-loader-0.53.tar.bz2 -P /usr/local/src/
cd /usr/local/src;
tar jxf  curl-loader-0.53.tar.bz2 &&
 cd curl-loader-0.53.tar.bz2 &&
 make

这时需求一个标准库 redhat下名为:c-ares ,用yum 安装就OK

yum install c-ares
echo 'export LD_LIBRARY_PATH=/usr/local/src/curl-loader-0.53/lib' >>/root/.bashrc

 

用法: curl-loader -f your.conf

在编译目录下,有一个名为 conf-examples 的配置样本的集合,合https.conf为例:进行相应的修改:如下:

 

########### GENERAL SECTION ################################
BATCH_NAME= https  #

CLIENTS_NUM_MAX=500# Same as CLIENTS_NUM 最大Client数

CLIENTS_NUM_START=100 # 起始Client数

CLIENTS_RAMPUP_INC=50 # 递增Client数

INTERFACE   =eth0 #请求网卡

NETMASK=16  #你懂的。

IP_ADDR_MIN= 10.20.99.213# 模拟起始IP,这次我只用了一台机器,所以开始和最后是一个 🙂

IP_ADDR_MAX= 10.20.99.213 #

CYCLES_NUM=200 # 这个比较重要,就是循环请求次数,比如我们最大请求Client为500,这个为200总请求就是10万. PS:值为 -1 时,为无限循环。

URLS_NUM= 1 #如果你有多个URL进行测试,这个真写个数,不过我只测试了一个


########### URL SECTION ####################################
URL=https://10.20.100.23/index.html

#URL=https://localhost/apache2-default/ACE-INSTALL.html

#URL=https://localhost/ACE-INSTALL.html

URL_SHORT_NAME="url-https"

REQUEST_TYPE=GETTIMER_URL_COMPLETION = 0 # In msec. When positive, Now it is enforced by cancelling url fetch on timeout

TIMER_AFTER_URL_SLEEP =500

 

以下是我的测试结果:

Request data size: 43K
Sleep time Internal: 1 second
RPS: 8000 requests/s
Time per requests: 87 ms
Client numbers: 4000 (实际nginx active connection numbers 为3300左右)

 

 

附:Nginx SSL部分的配置(红色部分很重要,去除EDH加密。)

Nginx 参数设置:

worker_processes  8;

events {    use epoll;    worker_connections  10240;}

server {
listen 443;
server_name SUBDOMAIN.happyelements.com
ssl on;
ssl_certificate all.happyelements.com.cert;
ssl_certificate_key all.happyelements.com.uns.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5:!kEDH; 
proxy_set_header X-Forwarded-Proto https;

access_log logs/ssl.w5-fish-ssl.happyelements.com.log
}

location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
#auth_basic_user_file conf/htpasswd;
}
}

location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
#auth_basic_user_file conf/htpasswd;
}

 

Python learning schadule

1. Python Basic skills & fundamental — Programming Python 3rd Edition [book recommend]

2. Python cook book — learning the contents are associated with system administration :

  • text

 

  • re

 

  • os

 

  • file operation.

3. Ipython interactive shell —Python.for.Unix.and.Linux.System.Administration[book recommend]