linux .net mono方案测试记录与报告(一)
第一阶段 linux .net 方案测试 硬件为4核8线程的笔记本i7-4710mq 分配了4个线程 情况下
1、方案一 nginx+fastcgi-mono-server4方式
性能为每秒处理1400-1700个请求 这是4核4线程虚拟机情况下的,如果16核的性能应该至少可以达到4-5倍,
2、方案二 别选方案 jexus 国产闭源的linux .net web server
jexus在部署方面简单 兼容性可能也比较好, 实际测试性能似乎因为其有防ddos功能,所以测试下来没有被拒绝并发数下为350-700,估计实际服务器的性能与环境至少10倍以上于这个测试值
其他几个方案 由于代码要另外定制 所以延后测试
以下是第一阶段测试记录
很久以前,大概还在07年,我也做过asp.net在ubuntu下的尝试,当时大概是u版本6.04-7.04之间吧 ,好像是6.10,mono版本我记得比较清楚,大概1.2.6的样子,要源代码编译才能运行,现在因为mono已经不能同日而语了,很多大牛都推荐并且认为mono的linux下.net方案可以商业使用了,所以进行本次测试。
我所找到的linux mono asp.net方案,主要是三方面:
- 传统webserver+mono-fastcgi-server4 这里的webserver可以选择nginx apache
- 国产闭源第三方asp.net linux mono方案:jexus
- 微软owin方案,可选微软自己的owin实现 Katana 项目,同属jexus开发者的闭源owin实现--项目TinyFox
我比较熟悉ubuntu,我的系统因为是windows,所以用虚拟机来运行ubuntu当前版本15.04;
物理机:我的笔记本、i7-4710mq 4核8线程、500gb ssd 三星evo850、内存16gb;
使用vmware工作站11版虚拟机,虚拟机内配置:cpu4核、内存8gb、硬盘40gb,然后安装ubuntu15.04,更换国内软件源,更新不活。
首先配置编译环境,ubuntu是deb软件包管理系统的,而mono的新版本通常不会很可被加入官方软件源,我喜欢在什么发行版就用什么发行版的包管理系统,
所以新版本的软件源都要编译成deb包,最方便的deb制作方式我知道的是checkinstall
sudo apt-get install checkinstall dh-make gcc g++
这样安装完成配置了基础的编译环境。
在我的使用中,ubuntu默认的输入法小企鹅fcitx 会看不到候选词,没找到设置上的问题,只好删了
sudo apt-get purge fcitx
还好中文输入方面系统自动用ibus补上了,虽然联想能力差了很多,但是至少勉强可以用了。
接下来,到mono官网www.mono-project.com/docs/getting-started/install/linux/#debian-ubuntu-and-derivatives找到ubuntu最新的mono安装方法,然后
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
版本更新了的MONO主包mono-runtime,找了网上的帖子,本来要去下源码编译的,发现某帖子上写着新的主要包是mono-complete,尝试之......一大堆要装,还好我网络快50m下载速度,检查mono版本,
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update
结果之后没找到
然后安装MonoDevelop
sudo apt-fast install monodevelop monodevelop-nunit monodevelop-versioncontrol
sudo apt-fast install mono-xsp4
新建个项目然后新建一个webform页面,根据下文的代码输出.net版本信息
blog.csdn.net/penginpha/article/details/6947546
编译后 右击项目然后run with 用火狐看
项目 | 值 |
CPU 类型 | 未知 |
操作系统 | Linux |
IP 地址 | 127.0.0.1 |
.NET CLR 版本 | 0.0 |
浏览器 | *0 |
支持 ActiveX | 不支持 |
支持 Cookies | 不支持 |
支持 CSS | 不支持 |
语言 | zh-CN |
计算机/手机 | 计算机 |
Platform | unknown |
Win16 | 不是 |
Win32 | 不是 |
Http Accept Encoding | gzip, deflate |
User Agent | Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 |
不是为mono准备的代码所以未知不确定项多了呵呵,但是至少说明基础的调试环境已经完成了
现在去配置正式的几个环境,首先nginx+mono-fastcgi-server4:
sudo apt-fast install nginx mono-fastcgi-server4
然后去配置,按照mono官方www.mono-project.com/docs/web/fastcgi/nginx/有文档,
第三方开发者的尝试文档blog.chinaunix.net/uid-25508399-id-3234867.html,
先配置/etc/nginx/sites-available/default
server {
listen 801;
server_name localhost;
access_log /var/log/nginx/test.log;
location /{
root /home/sfissw/www/;
index index index.html index.htm default.aspx Default.aspx;
fastcgi_index Home/Index; #指定根目录访问路径(default page)
fastcgi_pass 127.0.0.1:9000; #mono fastcgi server的url (可以指定其他服务器,目前指向本地)
include /etc/nginx/fastcgi_params; #包含 fastcgi params(php,aspnet相关的fastcgi参数配置)
}
}
改成以上这样 root是mvc站点所在目录 fastcgi_index 就是主页链接 webform 用index.aspx 所以mvc就用Home/Index了 我没实验 不过linux的关系可能跟windows不一样 有大小写问题 有的时候可能要想到
再改 /etc/nginx/fastcgi_params
添加
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
启动Nginx
启动fastcgi
然后如果是一个内容很少的aspx 所可以正常显示的 但是mvc可能就会一堆错 网上查过以后发现要重装xsp
这时候可能要先删掉一些mono的包 fast-mono-server4 mod-mono等 就不多提了
https://github.com/mono/xsp 去这里下载 xsp-matser.zip ......解压安装之 可能会需要另外安装基础包
sudo apt-fast install autoconf
在解压后的目录下
./autogen.sh
./configure --prefix=/usr
make
sudo checkinstall
这里默认会有个版本号错误 只需要 在询问你用数字 来改变版本号等信息的时候 按 3 然后随意输入个数字即可
之后checkinstall会安装并且生成deb包在目录下了
用checkinstall的目的是为了方便集中管理 deb rpm包的好处即在于此
初步测试了一下,果然跟网友们说的那样,mvc要在mono下运行起来蛮困难,尝试了一个基本的基础项目mvc和webform各一个 mvc就没运行起来,所以不钻牛角尖了,
今天的测试内容很简单,就是进行单点高并发测试,redis是必须的,
去redis.io 官网下载当前2.x版本最新版redis-2.8.21.tar.gz,3.0版本有很大改动,我接受一些网友的建议所以暂时不考虑使用;
解压,后
sudo make
sudo make test 测试一下没错就可以生成deb包了
sudo checkinstall运行正常的话 redis应该已经安装好了
虚拟机一直没注意看自己的ip
sudo apt-fast install net-tools
然后
ifconfig
得到
eth0 Link encap:以太网 硬件地址 00:0c:29:b5:03:ba
inet 地址:192.168.3.11 广播:192.168.3.255 掩码:255.255.255.0
inet6 地址: fe80::20c:29ff:feb5:3ba/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:502727 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:350025 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:251792406 (251.7 MB) 发送字节:114974666 (114.9 MB)
lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 跃点数:1
接收数据包:3456387 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:3456387 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:1083574717 (1.0 GB) 发送字节:1083574717 (1.0 GB)
本地ip就是192.168.3.11了
执行redis
/usr/local/bin/redis-server
现在去真机测试一下redis是否正常
cmd里执行
redis-benchmark -h 192.168.3.11 -q
PING (inline): 10559.66 requests per second
PING: 12804.10 requests per second
MSET (10 keys): 12195.12 requests per second
SET: 13736.26 requests per second
GET: 13192.61 requests per second
INCR: 13661.20 requests per second
LPUSH: 13458.95 requests per second
LPOP: 14792.90 requests per second
SADD: 13812.16 requests per second
SPOP: 14814.81 requests per second
LPUSH (again, in order to bench LRANGE): 13440.86 requests per second
LRANGE (first 100 elements): 13175.23 requests per second
LRANGE (first 300 elements): 6489.29 requests per second
LRANGE (first 450 elements): 5592.84 requests per second
LRANGE (first 600 elements): 4345.94 requests per second
基本的get、set都在1.3w以上应该可以了 我的机器配置不低 但是同时开虚拟机还分配了一半的资源,加上真机浏览器和vs以及其他软件和服务,有这点性能也很难得了,
在windows 真机这边做一个基础的测试:
测试工具 apache ab
主要代码
Response.Clear();
string value = string.Empty;
try
{
if (Request["value"] == null)
{
value = "false_" + Cache["time"].ToString();
}
else
{
DateTime now = DateTime.Now;
string k = System.Guid.NewGuid().ToString("N").ToLower();
string v = (now.ToString() + " " + now.Millisecond + Request["value"].ToString() + System.Guid.NewGuid().ToString("N")).ToLower();
System.Threading.ThreadPool.QueueUserWorkItem(state =>
{
try
{
bool x = RedisConnection.Set<string>(k, v);//存储到redis redis是在虚拟机内的
//v = RedisConnection.StringGet(k);
//Log.Enqueue(x.ToString() + "_" + DateTime.Now.ToString() + DateTime.Now.Millisecond.ToString() + "_" + k + "_" + v);
//RedisConnection.KeyDelete(k);
}
catch (Exception oe)
{
string err = oe.Message + oe.StackTrace;
}
}, null);
value = "true" + "______time:" + Cache["time"].ToString() + "______key:" + k + "______value" + v;
}
}
catch { }
Response.Write(value);
首先作为参照 直接在vs2013模式下 1000并发模拟 速度约为700-800次请求每秒
250并发情况 在我的win7 iis 下是2622次请求每秒,
估计我的cpu核数有很大影响 只是4核8线程
第一个环境 nginx+fast-mono-server4
执行
sudo fastcgi-mono-server4 /applications=/:/home/sfissw/www /socket=tcp:127.0.0.1:9000
sudo /etc/init.d/nginx start
启动这个组合
测试结果 很不稳定 并发上去以后 就会崩溃 在没崩溃以前得到了几次测试结果 在我的机器配置下 大概是1000并发模拟情况下是 1400-1700次请求每秒的处理速度
C:\Users\sfissw\Desktop\迅雷下载\pc6-abdotexexz>ab -c 100 -n 1000 "http://192.1
8.3.11:801/index.aspx?value=True_2015/6/29%203:13:02286_976fb1e9e75a40d68b297b2
e6d2dcef_2015/6/29%203:13:02%209217ba975a7f2ae4b45b47a13958ed66dd8True_2015/6/2
%203:13:04301_b56625d5003e417c981355d232094"
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.3.11 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.6.2
Server Hostname: 192.168.3.11
Server Port: 801
Document Path: /index.aspx?value=True_2015/6/29%203:13:02286_976fb1e9e
5a40d68b297b29e6d2dcef_2015/6/29%203:13:02%209217ba975a7f2ae4b45b47a13958ed66dd
True_2015/6/29%203:13:04301_b56625d5003e417c981355d232094
Document Length: 181 bytes
Concurrency Level: 100
Time taken for tests: 0.673 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Non-2xx responses: 1000
Total transferred: 341000 bytes
HTML transferred: 181000 bytes
Requests per second: 1485.80 [#/sec] (mean)
Time per request: 67.304 [ms] (mean)
Time per request: 0.673 [ms] (mean, across all concurrent requests)
Transfer rate: 494.78 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.7 0 4
Processing: 15 63 21.6 58 114
Waiting: 1 40 20.6 39 109
Total: 15 64 21.8 58 114
WARNING: The median and mean for the initial connection time are not within a n
rmal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 58
66% 67
75% 78
80% 84
90% 99
95% 108
98% 110
99% 111
100% 114 (longest request)
可能我分配给虚拟机的资源实在太多了,所以很多时候有cpu争夺的问题,下次测试应该试试两台物理机了,
第二个方案 jexus
下载解压 http://www.linuxdot.net/down/jexus-5.6.4.tar.gz
里面有个
sudo ./install
就安装好了
cd /usr/jexus
打开/usr/jexus/siteconf #网站配置目录
遍及里面的roo条目 指向改成 /home/sfissw/www/
cd /usr/jexus/
sudo ./jws start
就能运行了 可能之前的方案代码已经适用mono了 加上这个方案本身定制化的很厉害 所以一下就运行起来了
很奇怪测试结果似乎jexus比之前的方案正常情况下数据还要小
大概在350-700的样子
可能是当时我的系统已经开了几天了,开的东西太多了下次得换两个物理机才行
本来想实验owin的闭源和开源的两个方案,结果因为owin环境支持的asp.net得特别打造,所以时间不够了,另外apache+mod-mono回头也可以试一下,虽然理论上讲apache的吞吐量应该低于nginx
下一回再进行双物理机情况下,以及owin的2个方案,apache的方案;
待续......
linux .net mono方案测试记录与报告(一)的更多相关文章
- [转贴]LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project
https://blog.csdn.net/melody157398/article/details/24354415 LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---I ...
- Centos7.2 下DNS+NamedManager高可用部署方案完整记录
Centos7.2 下DNS+NamedManager高可用部署方案完整记录 之前说到了NamedManager单机版的配置,下面说下DNS+NamedManager双机高可用的配置方案: 1)机器环 ...
- 对Linux系统内核版本稳定性测试介绍
对Linux系统内核版本稳定性测试介绍 在对 Linux 内核版本稳定性的测试中,需要明确地声明并证明为什么版本是稳定的或者是不稳定的. 然而还没有被证明和证实当前现有的系统范围内的压力测试可以测试 ...
- LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project
LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project Peter盼 2014-04-23 11:25:49 20302 收藏 ...
- LTP--linux稳定性测试 linux性能测试 ltp压力测试 内核更新 稳定性测试
LTP--linux稳定性测试 linux性能测试 ltp压力测试 zhangzj1030关注14人评论33721人阅读2011-12-09 12:07:45 说明:在写这篇文章之前,本人也不曾了 ...
- LTP--linux稳定性测试 linux性能测试 ltp压力测试 ltp-pan
LTP--linux稳定性测试 linux性能测试 ltp压力测试 zhangzj1030关注14人评论33710人阅读2011-12-09 12:07:45 说明:在写这篇文章之前,本人也不曾了 ...
- Linux+apache+mono+asp.net安装教程
Linux+apache+mono+asp.net安装教程(CentOS上测试的) 一.准备工作: 1.安装linux系统(CentOS,这个就不多讲了) 2.下载所需软件 http-2.4.4.ta ...
- 【NO.13】Jmeter - 在Linux整理和计算测试结果
我们现在描述的是:在Linux系统使用Jmeter执行性能测试. 所以当执行完测试以后,就要计算一下测试结果,反馈给开发人员嘛. 在Linux系统使用Jmeter执行性能测试都包含哪些步骤,来,回顾一 ...
- linux 巨页使用测试
这里记录测试巨页的mmap使用,测试代码和<linux 巨页使用测试以及勘误1>类似. 跟踪脚本如下: probe kernel.function("hugetlb_reserv ...
随机推荐
- ERP_基于Oracle ADF的定制化企业级IT系统解决方案
2014-12-31 Created By BaoXinjian
- HDU 1257 最少拦截系统(贪心)
解题思路:用一个vector存下数据,从头开始非递增遍历,并把符合条件的删除,一次操作,ans++,当vector为空时退出循环.(PS:学到了vector的erase操作,竟然还有返回值,涨姿势了) ...
- Standing on Shouder of Giants
Zachary_Fan 如何一步一步用DDD设计一个电商网站(二)-- 项目架构 http://www.cnblogs.com/Zachary-Fan/p/6012454.html HTTP 权威指南 ...
- JAVA 对象初始化的过程
对象初始化的过程例:Student S = new Student();1.因为new Student()用到了Student类,所以会把它从硬盘上加载进入内存2.如果有static静态代 ...
- 在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程
在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github ...
- php 获取时间今天明天昨天时间戳
<?php echo "今天:".date("Y-m-d")."<br>"; echo "昨天:&qu ...
- 第一个APP:IOS做简单运算的计算器
步骤: 1.打开Xcode,单机Creat a new Xcode project 2.左边选择ios下Application,右边选择single view Application 3.填写项目名称 ...
- 软件开发过程文档-cgaowei
鸡肋——食之无味,弃之可惜”,软件开发过程文档遭遇了鸡肋一样的境遇. 目前敏捷软件开发过程非常流行.相对于软件开发过程文档,敏捷软件开发过程更加重视可运行的程序.关于软件开发过程文档,两个极端都是不可 ...
- android 4.4 状态栏隐藏
这个是Android Developer上的原文 反正我也看得不是很懂 我知道的就是实现和导航栏和状态栏的透明 带一些渐变效果 1. 设置主题 <style name="Theme.T ...
- DevExpress某些控件继承后的可编辑性
今天在使用DevExpress的BarManager菜单控件时,发现在进行继承时无法在继承的子类窗体中对其进行编辑与修改,另外像GridView也有类似的情形,后来查阅资料后,现在可通过DevExpr ...