egmkang

       "新的代数语言每5年就走红和过时,而我想要强调的是永恒的概念." ------By Knuth
posts - 6, comments - 92, trackbacks - 1, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 ::  :: 管理

用lighttpd+mono在Linux上面跑ASP.NET程序

Posted on 2008-04-07 20:20 egmkang 阅读(2469) 评论(44)  编辑 收藏 所属分类: 服务器
       是的,没错,用lighttpd(念作:lighty)+mono可以在Linux上面跑Linux程序.
       lighttpd是一个轻量级服务器,设计1w+静态网页并发.刚开始把lighttpd配只好后,浏览静态网页,那个速度就像飞一样.据说豆瓣就是靠lighttpd支持2500+W每天的访问量.lighttpd还会支持FastCGI扩展支持更多的动态网页程序.我就是安装另一个mono的FastCGI,才使lighttpd可以跑ASP.NET 程序的.
      
       一.先来看看怎么安装lighttpd: (Linux下面安装软件有一个特点就是自己编译,然后make install.时间长了感觉很顺手的,刚开始不习惯.)
       1. 到http://www.lighttpd.net/上面去下载源代码,然后解压缩,假设$lighttpd_src为源代码目录.
       2.编译,安装.
              假定安装路径为$install_root,下面用"/usr/local/lighttpd"为例.
             # cd $lighttpd_src
             # ./configure  --prefix=/usr/local/lighttpd
             先检查一下类库依赖,看看需要用到的类库是不是都有.要是没有的,看看少哪个,在ubuntu下就是apt-get一下,在我的openSuSE10.3下面就是"安装软件",输入名字,安装就行了.另外,要是用openSuSE 10.3的话,(我的机器)默认安装lighttpd 1.4.18的,那个也可以用的.要是不嫌麻烦的话,就装一个1.4.19.
             # make
             # sudo make install
             至此,lighttpd基本所算是安装好了,下来就是lighttpd的配置之类的.不想配置的话,lighttpd也可以用的.就看你的爱好了.反正我是不想整了,头都大了.
             lighttpd的启动是:
             # $install_root/sbin/lighttpd -f $lighttpd_src/doc/lighttpd.conf
             你可以把那个conf文件copy到一个你容易使用的地方,openSuSE默认的地方时/etc/lighttpd/lighttpd.conf.
             关闭lighttpd:(需要su权限)
             # killall lighttpd
        3.稍微配置一下lighttpd.conf文件,使之可以浏览静态网页.看看速度如何.
             打开文件,找到server.document-root这个节点,后面填上静态网页的路径,比如我的是server.document-root="/home/egmkang/Program/html/".
             然后 启动lighttpd,在浏览器里面输入localhost看看.一般是可以的,要是不幸的话,看看server.bind="192.168.1.110"里面填的是什么,一般是127.0.0.1或者localhost.

        二. 至此,lighttpd就可完全工作了,要是想跑ASP.NET程序的话,还得再加上mono的FastCGI 模块.下来我们安装xsp,并配置好conf文件.
         1.上mono的官方网站去down一个xsp,这个是必须的,一般会是一个rpm包.
             安装这个rpm包的时候肯定会说少什么包,就在那个网页上面下载什么包.因为我是用YaST安装的,没注意这个事.SuSE用户可以看看这个更新源
                http://en.opensuse.org/Additional_YaST_Package_Repositories#Mono
          2.下来配置lighttpd.conf文件
             在文件里面添加进去:
            
            ################################################
            # fastcgi-mono-server2
            ################################################
         
            var.mono_dir = "/usr/"
            var.mono_shared_dir = "/tmp/"
            var.mono_fcgi_root = server.document-root
            var.mono_fcgi_applications = "/:."

            $HTTP["host"] == "192.168.1.110" {
            server.document-root = "/home/egmkang/Program/html/"
            fastcgi.server = (
                "" => ((
                        "socket" => "/tmp/fastcgi-mono-server",
                        "bin-path" => "/usr/bin/fastcgi-mono-server2",
                        "bin-environment" => (
                                "PATH" => "/bin:/usr/bin:" + mono_dir + "bin",
                                "LD_LIBRARY_PATH" => mono_dir + "lib:",
                                "MONO_SHARED_DIR" => mono_shared_dir,
                                "MONO_FCGI_LOGLEVELS" => "Standard",
                                "MONO_FCGI_LOGFILE" => mono_shared_dir + "fastcgi.log",
                                "MONO_FCGI_ROOT" => mono_fcgi_root,
                                "MONO_FCGI_APPLICATIONS" => mono_fcgi_applications
                        ),
                        # 这个为cgi模块的最大实例数目
                        "max-procs" => 1,
                        "check-local" => "disable"
                ))
            )
            fastcgi.map-extensions     = (
                            ".asmx" => ".aspx",
                            ".ashx" => ".aspx",
                            ".asax" => ".aspx",
                            ".ascx" => ".aspx",
                            ".soap" => ".aspx",
                            ".rem" => ".aspx",
                            ".axd" => ".aspx",
                            ".cs" => ".aspx",
                            ".config" => ".aspx",
                            ".dll" => ".aspx",
                            ".castle"=>".castle",
                            ".rails"=>".rails"
                            )
        }

        现在重新启动lighttpd,在"虚拟目录"下面放置一个info.aspx看看能不能访问,要是能的话,就配置好了.要是不能的话,我基本上也没办法....汗这个配置文件就是我机器上面的.........
       这个是我的info.aspx的截屏  http://images.cnblogs.com/cnblogs_com/egmkang/127872/r_info.aspx.png  .
     
       3. 你刚才看到了.castle.对没错,我在这个服务器上面成功跑起来MonoRail自带的那个例子.
            (注:MonoRail自带的例子的程序写的有一些问题的,就是文件名称的大小写问题,刚才我好好测试了一下那个工程,全部是文件名称的问题,他自己程序写的时候没注意.而且,光靠改文件名称的大小写还不能是网站完全跑起来,得把程序里面的名字修改了,要不然他一会儿访问Index.vm,一会儿又访问index.vm........)
           把MonoRail自带案例的文件复制到你的虚拟目录下面,修改Web.config文件名为web.config,./Views文件夹下面的Home文件夹为home,./Views/home/文件夹下面的Index.vm为index.vm.因为在Linux下面文件是区分大小写的,Win下面不区分.所以那个项目在Win下面能正常运行,在Linux下面不一定可以.
          (这一步我不知道可以省略不,因为没办法作对照实验....)把Castle的那些dll类库文件复制到mono的安装目录下面.在我的机器上面是/usr/lib/mono/2.0 .要是你的机器上面不是,那就whereis mono看一下.:lol
          这个是截屏:http://images.cnblogs.com/cnblogs_com/egmkang/127872/r_monorail.png
          园子把图片的尺寸都给改了,看得很模糊,大家将就一下.

       最后要说的是,lighttpd性能很好,这个不用我的废话,但是需要自己慢慢调试优化,达到最优的效果不是很容易的.(我现在还是一个菜菜.刚刚会用而已:lol)要是弄得好的话,也有可能用一两台破服务器实现2500+W/天的Hits访问量.不知道园子一天多少pv阿?貌似园子用的是8核CPU阿.......(貌似比较兴奋,以为1天2500W 的pv,后来一看不是500W 左右.特此订正.谢谢老赵.)
------------------------------------------

        Join US,Thank you.   

        或者瞧瞧我们的QQ技术群:20240291.

        egmkang

Feedback

#1楼    回复  引用  查看    

2008-04-07 20:34 by zitsing      
那asp.net的优势又增加一个!

#2楼    回复  引用  查看    

2008-04-07 20:55 by Justin      
@zitsing
同感

#3楼    回复  引用    

2008-04-07 20:58 by oldrev [未注册用户]
在 linux 下面跑有大小写问题,比如那个 web.config 就不能写作 Web.config

#4楼    回复  引用  查看    

2008-04-07 21:27 by Indigo Dai      
有趣

#5楼 [楼主]   回复  引用  查看    

2008-04-07 21:31 by egmkang      
@oldrev
对的.
我刚才看了一下那个monorail,它对文件的访问听随便的......可是linux区分大小写....
很郁闷

#6楼    回复  引用  查看    

2008-04-07 21:56 by Jeffrey Zhao      
可能lighttpd的优势在于静态文件访问,我不相信Linux上跑asp.net性能会比Windows高。

#7楼 [楼主]   回复  引用  查看    

2008-04-07 22:03 by egmkang      
@Jeffrey Zhao
怎么说呢.这个问题很难说清楚的.
不过我可以大一个比方,豆瓣配置(你自己上网上查)是gentoo+lighttpd+python. python的性能应该比C#差多了吧?!但是人家的那个什么服务器,1天2500W级别的PV访问量.
还有javaeye用的是(操作系统不知道)linux+lightty+ruby,ruby的那个性能你不会不了解吧,解释执行,但是你看看javaeye的访问速度就知道了.
:lol
IIS跟lighttpd的设计思想是不一样..........

#8楼 [楼主]   回复  引用  查看    

2008-04-07 22:08 by egmkang      
@Jeffrey Zhao
现在mono开发的不是很好.不是很稳定.性能也不是很好.我觉得主要是内存管理这方面.要是作好了的话.:lol
大家全部搬到linux下面去,架一个服务器,都是免费的,而且性能还好.

#9楼    回复  引用  查看    

2008-04-07 22:38 by JesseZhao      
这个问题应该是看 豆瓣和javaeye使用了什么缓存方案才对
如果缓存命中率高的话c#和python的执行效率区别也就不是太重要了

PS:lighttpd他的效率确实高

#10楼    回复  引用  查看    

2008-04-07 22:39 by Jeffrey Zhao      
@egmkang
2500w是pv?请注意是访问量,不是PV,访问量是包括静态文件的,不是一个动态200请求,理论上一个200动态请求会附带几个甚至十几个。IIS的性能已经足够优秀了,一秒钟处理几百个请求完全不成问题。
不过豆瓣pv一天500万pv左右,的确很厉害,不过这个几乎完全是和程序编写的有关,和Web服务器没有太大关系。你可以看到最近有关IIS7的一个评测(http://www.cnbeta.com/articles/52507.htm),FastCGI下跑PHP性能如何,PHP都如此厉害,ASP.NET会不行吗?
至于javaeye,他们web服务器承受大约每天60-70万的pv,Windows下也完全做的到。
再者,换个方式说,微软会让windows下的ASP.NET比linux下跑的慢吗?如果真是这样,只能说明微软的技术能力不行,但是关于这点就不多说了,完全不可能的事情。

#11楼    回复  引用  查看    

2008-04-07 22:41 by Jeffrey Zhao      
--引用--------------------------------------------------
JesseZhao: 这个问题应该是看 豆瓣和javaeye使用了什么缓存方案才对
如果缓存命中率高的话c#和python的执行效率区别也就不是太重要了

PS:lighttpd他的效率确实高
--------------------------------------------------------
其实目前web开发主流技术开发出来的web应用程序性能都可以做到差不多,因为web应用程序的性能方面问题大都和具体技术实现无关。

#12楼    回复  引用    

2008-04-07 22:47 by wjx [未注册用户]
第一:豆瓣有几台服务器?
第二:某网站:4个windows双核+asp.net,1500W PV/日

#13楼    回复  引用  查看    

2008-04-07 22:51 by Jeffrey Zhao      
@wjx
豆瓣当时据说是一台,现在似乎是两台。//单指web服务器。

#14楼    回复  引用    

2008-04-07 23:12 by clanda [未注册用户]
@lz
超过1500W以后,web server1台是不可能的.原因如下:
访问时段不平均,多的时候,每小时可能超过200W,再有个意外,任何webserver都撑不住;少的时候,就几千。因此关键就是要撑住那超过200w的时候。
根据请求的复杂度不同,同时处理的请求数量就不一样,一般来说,web server都可以支撑数千用户的同时访问(需要分布式缓存系统的支持了)。

#15楼    回复  引用  查看    

2008-04-07 23:23 by Jeffrey Zhao      
@clanda
缓存是高性能应用中最重要的手段(连之一都不加)。
有人说是静态化,其实原理和缓存差不多,不过静态化在大部分web 2.0应用中有局限性,所以还是缓存,缓存,缓存。
然后就是针对性能瓶颈优化,比如数据库。

#16楼 [楼主]   回复  引用  查看    

2008-04-08 00:09 by egmkang      
@Jeffrey Zhao
谢谢老赵提醒,光顾着兴奋了,没看清pv和hits.汗一个.
是,60-70W的pv用iis可以做到,但是得花多少银子的.另外IIS 的性能我没看出来有多好,我现在用的win2003+iis6.0 不见得有多好的.可能我的机器太差了.但是豆瓣的也好不到那里去,无非就是比我多一个内核的athlon服务器版外加多一些的内存,请问这个配置,iis下面可以实现么?
还有,你给的那个连接貌似有一点问题阿.那片文章是 4月1日发布的.对这个日子比较敏感.要是4月2日发布的,我肯定信.还有,令人很怀疑的是,既然是测试,为什么不写上Linux的版本.众所周知,linux版本何其多,性能参差不齐.
mono是novell赞助的一个开源项目,跟MS 没有关系.唯一的关系就是MS 把.NET框架的一部分题交给ECMA.mono团队只是实现了一个夸平台的.net而已.显然这个mono现在性能很不好,跟Win下面的.NET根本就没有可比性.要是MS愿意站出来给.NET写一个夸平台的fastcgi的话,你就会看到ASP.NET在lighttpd(linux)下面有多快了.

#17楼    回复  引用    

2008-04-08 00:23 by clanda [未注册用户]
4,5百万级PV的IIS也可以做 2CPU/2G内存

#18楼 [楼主]   回复  引用  查看    

2008-04-08 00:23 by egmkang      
@wjx
豆瓣现在应该是两台服务器,性能都不是很好的.就是一般的高端PC.据说,用4核的可以实现一台服务器1000W/天的PV. http://www.dbanotes.net/arch/douban_web_server.html

4台双核=1500W PV,很好了.

#19楼 [楼主]   回复  引用  查看    

2008-04-08 00:25 by egmkang      
@clanda
:lol
我只是玩一下,不是当真的.不过能听到高手评论,说说经验,收获也是不少阿~~~

#20楼    回复  引用    

2008-04-08 00:26 by wjx [未注册用户]
@egmkang
web server,CPU高峰期的平均占用时间基本上是小于50%的,撑到2500W应该没有问题

#21楼 [楼主]   回复  引用  查看    

2008-04-08 00:31 by egmkang      
@clanda
貌似是一个大牛光临我的blog,貌似以前见过这个名字.请问是不是搞CPP开发的?

#22楼 [楼主]   回复  引用  查看    

2008-04-08 00:32 by egmkang      
@wjx
看文章说web server的压力一般不是很大,主要是数据库的.

#23楼    回复  引用  查看    

2008-04-08 01:16 by Jeffrey Zhao      
@egmkang
如果你说IIS6性能不高,那么只能说明是你的程序写错了,这段程序无论移植到哪里去性能都不会高,因为问题不在web server上。
至于IIS7的FastCGI的性能,你自然可以认为是4/1说着玩的,但是你也不妨可以搜索一下在4/1以外日子里的文章,4/1的并非全是假的。
至于你说MS为Linux开发mono性能就会多好云云,我本来就没有在比较mono和windows上asp.net的性能,而是在比较windows中部署asp.net和其他环境下其他服务器技术的性能,所以你说的和我比较的完全不是一件事情。
性能这东西是需要体验的,不能人云亦云。
还是拿豆瓣来说,它的“强大”在于程序写的好,并不是因为用了lighttpd。如果把这段程序移植到windows+asp.net上来,我相信依旧可以做得到。

#24楼    回复  引用  查看    

2008-04-08 01:30 by Jeffrey Zhao      
--引用--------------------------------------------------
egmkang: @wjx
豆瓣现在应该是两台服务器,性能都不是很好的.就是一般的高端PC.据说,用4核的可以实现一台服务器1000W/天的PV. http://www.dbanotes.net/arch/douban_web_server.html
4台双核=1500W PV,很好了.
--------------------------------------------------------
这个说法我觉得值得斟酌,将服务器多加两个核就能把性能加倍,难道瓶颈在web server上?

#25楼 [楼主]   回复  引用  查看    

2008-04-08 01:49 by egmkang      
@Jeffrey Zhao
现在的服务器只是单片双核的opteron。换4核的话,应该能到一台1000万PV/ 天。
这个是http://www.dbanotes.net/arch/douban_web_server.html 这个网页上面的一句原话,你可以看看那片文章。
:lol

#26楼    回复  引用  查看    

2008-04-08 08:40 by 戏水      
请楼主帮忙试试能不能运行Discuz!NT ^_^

#27楼    回复  引用  查看    

2008-04-08 09:17 by kuafoo      
我就用Win2003 + IIS6 日PV200万 服务器配置为PD925+2G内存 页面是静态的 CPU占用可以忽略 2%都不到

#28楼    回复  引用    

2008-04-08 09:21 by 看笑话 [未注册用户]
PHP都如此厉害,ASP.NET会不行吗?


有没有用过php啊,别在这搞笑了

#29楼    回复  引用  查看    

2008-04-08 09:23 by Jeffrey Zhao      
--引用--------------------------------------------------
egmkang: @Jeffrey Zhao
现在的服务器只是单片双核的opteron。换4核的话,应该能到一台1000万PV/ 天。
这个是<a href="http://www.dbanotes.net/arch/douban_web_server.html" target="_new">http://www.dbanotes.net/arch/douban_web_server.html</a> 这个网页上面的一句原话,你可以看看那片文章。
:lol
--------------------------------------------------------
我知道这句话的出处,只是对于这个结论深表怀疑。

#30楼    回复  引用  查看    

2008-04-08 09:23 by 雨中漫步的太阳      
不管怎么说都是一个让人振奋的消息

#31楼    回复  引用  查看    

2008-04-08 09:25 by Jeffrey Zhao      
--引用--------------------------------------------------
kuafoo: 我就用Win2003 + IIS6 日PV200万 服务器配置为PD925+2G内存 页面是静态的 CPU占用可以忽略 2%都不到
--------------------------------------------------------
对于静态资源,性能远不止这些,估计你的瓶颈在于市场和业务,呵呵。

#32楼    回复  引用    

2008-04-08 09:28 by 在线代理 [未注册用户]
discuz ! nt
我估计mono下肯定是直接跑不起来的。

#33楼    回复  引用  查看    

2008-04-08 09:30 by Jeffrey Zhao      
--引用--------------------------------------------------
看笑话: PHP都如此厉害,ASP.NET会不行吗?
有没有用过php啊,别在这搞笑了
--------------------------------------------------------
看来您根本没有了解我在说什么。

#34楼    回复  引用  查看    

2008-04-08 09:31 by datasky      
我试过在 Red Hat Enterprise Linux 4 AS 上通过 mono 来运行asp.net的程序,同样的程序如果连接sql server数据库则没有任何问题,但是连接oracle数据库就出错了。请各位给点帮助,谢谢!
http://www.cnblogs.com/datasky/archive/2008/03/21/1116662.html

#35楼    回复  引用  查看    

2008-04-08 10:17 by 天生俪姿      
晕了~!这个东西都上升到这么高的级别了啊~!
全是晕乎乎的东西~!
不过觉得很兴奋 因为Linux 下能跑Asp.Net
不过不太明白 是不是大家讨论的是这个服务器的性能的问题?
这个Web 服务器 能比IIS 跑的快?
昏~!

#36楼 [楼主]   回复  引用  查看    

2008-04-08 12:32 by egmkang      
@戏水
有时间帮忙测试一下。^_^
只是既然都用Linux,架bbs用Discuz!NT,那么为什么不用Discuz!????linux下面对php的支持更好一些,资源更多.你以为如何?

#37楼 [楼主]   回复  引用  查看    

2008-04-08 12:33 by egmkang      
@kuafoo
跑静态页面,lighttpd设计的是1W并发,请问IIS可以么?

#38楼 [楼主]   回复  引用  查看    

2008-04-08 12:36 by egmkang      
@datasky
请问你安装了mono的oracle驱动么?

#39楼    回复  引用    

2008-04-08 14:04 by chou [未注册用户]
不是直接拿xsp就能运行asp.net吗?不过也没太研究,与这东西(XSP)相比强在哪儿?

#40楼 [楼主]   回复  引用  查看    

2008-04-08 14:09 by egmkang      
@chou
这个的本质就是用xsp来运行asp.net
强在哪里我不知道.

#41楼    回复  引用  查看    

2008-04-08 14:44 by 酷客网络      
试试看

#42楼 [楼主]   回复  引用  查看    

2008-04-19 17:32 by egmkang      
@戏水
这两天看看了那个Discuz!NT.貌似想要在Linux下面运行的话,需要很大的功夫.原因他的那个程序调试只是针对MS 的.NET平台,根本没有考虑其他的兼容平台.MySQL服务器连接是需要驱动支持的.项目本身自带的mysql驱动是Win下面的,要移植到Linux下面貌似需要自己手写代码.......

#43楼 [楼主]   回复  引用  查看    

2008-04-19 17:38 by egmkang      
@戏水
而且,Discuz!NT这个东西本身设计是有问题的,对标准的支持是很差的.就光安装界面我就修改了很长时间才能填写用户名密码之类的,否则是不允许修改任何信息的(本身为空...).到了数据库连接就会出现问题,一直说没有mysql服务器.上官方论坛也没有结果,上面一堆人都说这个问题.
总之,很不好弄阿~~~

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-08 02:35 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: