码迷,mamicode.com
首页 > Web开发 > 详细

linux .net mono方案测试记录(一)

时间:2015-06-29 11:28:11      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

很久以前,大概还在07年,我也做过asp.net在ubuntu下的尝试,当时大概是u版本6.04-7.04之间吧 ,好像是6.10,mono版本我记得比较清楚,大概1.2.6的样子,要源代码编译才能运行,现在因为mono已经不能同日而语了,很多大牛都推荐并且认为mono的linux下.net方案可以商业使用了,所以进行本次测试。

我所找到的linux mono asp.net方案,主要是三方面:

  1. 传统webserver+mono-fastcgi-server4 这里的webserver可以选择nginx apache
  2. 国产闭源第三方asp.net linux mono方案:jexus
  3. 微软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
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
结果之后没找到
版本更新了的MONO主包mono-runtime,找了网上的帖子,本来要去下源码编译的,发现某帖子上写着新的主要包是mono-complete,尝试之......一大堆要装,还好我网络快50m下载速度,检查mono版本,
然后安装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方案测试记录(一)

标签:

原文地址:http://www.cnblogs.com/sfissw/p/4603461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!