paulwong

#

[搬金砖]买笔记本绕坑指南,附天梯图地址已更新(1.7)


写在前面:新的一年开始了,又有一大批刚工作的和刚入学的兴致勃勃的,即将购买人生中的第一个笔记本电脑了,在此本老鸟根据混迹中关村在线,太平洋电脑5年,外加大量实战经验(改装,清灰,升级,装系统等等。。。)为大家献上一篇笔记本电脑选购指南。PS,本文仅供参考,购机需谨慎。
附图如需详看,请移步网盘yunpan.cn/cyPFVpCrij7Fr  提取码:f61c。上传尺寸太大,传图还不是很熟悉!!!
废话不多说,现在开始详细解读:



真心感谢各位聚聚和大大们的支持,帖子是我混论坛发掘出来的不错的,会做了搬运和少量修改罢了(原帖开头已给出说明)。虽然对于买电脑有些体会,但未达到高深境界。回复已一一拜读并根据掌握的微小知识面来回答给出了些微建议。如不满意,可回复讨论。
说明一下:回复的比较集中的问题,没有写华硕电脑原因:华硕的主板的强悍自不必说,电脑也是全球第三大出货。可小草周边的同事之前的同学,都没有购买过该品牌,所以想得到些建议只能从网络,但是真心的褒贬不一,所以未亲自验证过还是不敢妄加增减。至于三星的也没写是因为小草对三星无爱,虽然很多实用三星手机的人说质量如何如何好,可能三星大公司在韩毕竟是可生产军工,质量过硬。可要知道4000亿的年广告费可都是需要加到消费者的腰包里的。哎,算了,姑且把它也加到未来人类一类吧(虽说三星的配置比不上)。


购机步骤一:

明确购机目的



这一点非常重要,主要分图形视频设计(需要大量使用PS,AE,CAD,3DMAX等专业软件的);编程和高强度办公(经常使用编程,数据库,虚拟机,使用word处理几十页上百页资料排版等);大型游戏(指的是单机大型3D游戏,比如看门狗,比如生化危机,古墓丽影,尘埃,杀手5.。。等等);网络游戏(指的是各种高中低档网游,如魔兽世界,剑灵,LOL,DOTA等等);简单上网看视频(没事看看快乐大本营,聊聊QQ,看个漫画,斗个地主之类);移动办公类(额,就是移动办公);装X(这个就不解释了)。

购机步骤二:明确预算

一句话的事,分3000以下、3000~5000、5000~8000、8000~12000、12000以上 共五个档次。

购机步骤三:讲解各配置代表的意义


3.1 CPU

cpu,即中央处理器,是一台电脑的最核心硬件,直接决定了一台电脑的退休年龄。

选一个好的CPU,首先要学会屏蔽各种商家的“坑爹广告语”:急速双核处理器、高端四核处理器、主频高达2.5G。切记推销核心数,主频数的,可以直接忽略掉,直接查询CPU型号,然后根据CPU天梯图推算CPU性能,这里就不深入讲解了,只是简单说明一下各种购机目的对应的CPU需求,大家可以根据天梯图进行推测(最近出的I7-4710MQ,性能跟I7-4700MQ接近)。

图形视频设计,网络游戏:5000以下的(至少I5-4200M); 5000~8000预算的,围绕I5-4200M~I7-4700MQ选择;8000预算以上的,选择I7-4700MQ以及以上性能的

编程和高强度办公,大型游戏:无论多少预算,选择I7-4700MQ以及以上

简单上网看视频:3000~5000预算的,I3-4000M~I5-4200M范围;5000预算以上的,I5-4200M以上即可。

移动办公:无论多少预算,要选择低功耗的(即天梯图最右边的区域,型号带U),也就是所谓超极本。(当然低功耗的I5,I7,应对简单的网络游戏,上网看视频也是够用的,只是可能会卡,不推荐);3000~5000预算的,I3-4100U附近;5000~8000预算的,I5-4200U附近;8000预算以上的,I7-4500U以上

装X:哪个贵买哪个。

这里有几点提示:

1,本文笼统的以I3,I5,I7作为性能的分界线,实际性能可以对应天梯图来判断;推荐使用Intel出产的I系列处理器,因为AMD公司出产的笔记本处理器,不管主频多少,核心数多少,最顶级的也才堪堪达到I3的水平。

2,笔记本CPU中,I7和I5有着极其巨大的差距,实际体现为:编程运行时,游戏加载时,解压缩时,批量调整格式时,处理大图片时等等,其他配置相同情况下,需要时间差距在100%以上;而I3与I5的实际体验差距不甚明显,目测差30%顶天了;

3,对于整机寿命,纵观笔记本电脑发展史,I7处理器(这里指正常电压的,后缀没有U的。带U的是低电压的,性能较弱)从发布到完全落伍时间,几乎为无限,也就是简单地说,任何时代出产的配备I7处理器的笔记本电脑的,因为CPU性能落伍而导致换机非常非常少。而对于I5处理器,退伍时间为4-5年;I3处理器,退伍时间为3-4年;I3处理器性能以下的,寿命3年左右。

这个原因可以解释一下,由于I7系列属于顶级处理器,在早期出现时就遥遥领先与其他处理器,而且限于功耗太高,很难大幅提升性能,所以退伍时间长,而I3,I5处理器在初期性能较低,近年来性能提升非常快,淘汰速度也很快。

4,处理器的升级。对于笔记本的cpu,很多人都不甚了解,其实后缀是带M的(比如I5-4200M),都是可以更换升级的,淘宝可以买到这种CPU,找个技术高点的修电脑的就可以换。但是后缀带H,HQ的(比如I5-4200H,I7-4700HQ)是不能更换的,是焊接在主板上的。这种升级一般在笔记本临近退休的时候,已经过保很久了,搞坏了不心疼,换好了可以再战3年无压力。

5,关于发热量:I7>>I5或I3(I3与I5档次的发热量差距不大,I3略小一点点而已)>>低电压,型号带U的(例如I5-4200U)

配备I7处理器,夏天高负荷运转(玩大游戏,编程模拟,编辑视频等),一般会到烫手的程度;配备I5及其以下处理器,夏天高负荷运转(性能接近I7的一半左右),也会比较热;低电压处理器,几乎感觉不到发热。

具体情况下面会详谈。


3.2 显卡

显卡,决定了整个电脑的图形处理,视频处理,游戏性能,同样决定了一台电脑的退休年龄,嘿嘿,退休年龄基本就是CPU和显卡决定的咯~~

选一个好的显卡,首先要学会首先要学会屏蔽各种商家的“坑爹广告语”:1G独显、2G独显、双显卡、集成加独立双显卡。类似于CPU,我们屏蔽掉这些坑爹广告语,找到真实的显卡型号,然后对比给出额显卡天梯图,查出对应性能。

图形视频设计,大型游戏:5000~8000预算的,围绕GTX850M选择;8000~12000预算的,选择GTX860M~GTX870M左右;12000预算以上,选择GTX870M以上

网络游戏:3000~5000预算的,GT740,或者GT840M左右范围;5000预算以上的,GTX850M以上即可。(魔兽世界和剑灵这种档次的网游,最少GTX860M才能跑的开,所以玩这两种游戏的,参照大型游戏的显卡需求来选择)

简单上网看视频,移动办公,编程和高强度办公:这种需求,无视显卡,随便,不管是独立的集成的,怎样的都能满足需求。

装X:哪个贵买哪个。

这里有几点提示:

1,对于显卡,英伟达和AMD的都具有实力,上文选择英伟达的只是做例子,在天梯图上可以找到AMD的对应档次。

2,对于集成显卡,现在能买到的集成显卡,大多为HD4600,HD4400,这些集成显卡性能足够满足看视频玩斗地主,但是其他需求就难为它们了。所以推荐,如果不玩游戏不做绘图不做视频可以忽略显卡选择,独显集显无所谓。

3,关于升级,跟CPU不同,显卡大多是焊接在主板上,不能更换的,只有在比较高端的(至少GTX860M以上),才能更换升级。不过技术难度较高,会导致不给保修。推荐过保后在升级显卡。


3.3 硬盘

硬盘主要分为固态硬盘SSD,机械硬盘HDD,和混合硬盘SSHD

SSD固态硬盘,容量低,价格高,速度非常快,尤其是杂乱的数量巨大的小文件(举个例子,其他配置相同的情况下(都比较高),装SSD的电脑开机速度为5-10秒,打开word速度为3秒左右,打开PS速度为5秒左右;装普通HDD的电脑开机最少得20秒,打开Word速度为10秒,打开PS速度为30秒    这些都是估计值),但是对游戏卡顿无提升作用,仅限于打开快一点,读图快一点。(备注,苹果的任何笔记本电脑的SSD固态硬盘性能都比普通SSD固态硬盘高一半以上。)

HDD硬盘,容量大,别的不用说了。

SSHD硬盘,容量大,在开机速度和打开软件速度具有类似SSD的功能,但是需要多次重复才能达到近似SSD速度,而持续读写,拷贝大文件,拷贝大量小文件,解压缩这些性能几乎与HDD一样慢。

另外有一种极其土豪的硬盘组合,叫做硬盘阵列,简单介绍就是多块SSD固态硬盘组合而成,速度等于N块SSD速度的线性叠加

下面,介绍硬盘需求:

对于移动办公,编程和高强度办公,图形视频设计:推荐使用SSD固态硬盘

其他需求,预算足够尽量上SSD,或者SSHD;预算不足可以以后再加装SSD。

这里有几点提示:

1,所有硬盘都是可以更换的,其中有一些比较高端的电脑会预留一些硬盘接口,这样可以方便以后添加SSD固态硬盘;没有预留接口的,可以把光驱拆掉,在光驱位加装硬盘;没有预留接口,又没有光驱的,只能使用一块硬盘,速度和容量不能兼顾,推荐使用SSHD,或者日后升级SSHD。

2,要长时间大量使用优特或迅雷,保种和下载电影的同学,推荐配备两块硬盘,把下载目录放在非系统硬盘上,否则容易导致系统卡死,尤其是单HDD硬盘的情况下,咱学校的网速够快,容易导致卡死。

3,硬盘容量,SSD的话,60~64G勉强够装系统;120~128G足够使用;HDD和SSHD的话,500G以上都可以,想存储大量电影,大量文件的,日后购买移动硬盘更方便。

3.4 内存

现在购买笔记本电脑,内存基本上就不在考虑范围了,4G起步,日常使用就够了,8G怎么用都用不完,而且加装一个4G的内存条也就300块钱,加装过程非常简单。

3.5 屏幕大小以及分辨率

玩游戏,制图,大量处理办公文件,推荐15.6英寸或17.3英寸,1080P分辨率。大屏幕分辨率太低,会看着满屏幕都是颗粒。PS,17寸的本,体积比较大,很难放进包里带走,而且很重,需要经常移动的,请谨慎。

便携式的,推荐14英寸,13.3英寸,1366*768或者1600*900分辨率。小屏幕分辨率太高,会导致屏幕字非常小,闪瞎眼

关于屏幕的更换和升级,也是可以做到的,淘宝找到对应型号,买下来就能换高分屏了,不过技术难度较高,会导致不给保修。推荐过保后在升级屏幕。

3.6笔记本外观散热

外观和散热放到一起说,是因为这两个联系紧密。一般来说,笔记本越厚散热越好,金属部分越多,散热越好,风扇口越多的,散热越好,新出的模具的笔记本,比老模具的散热好。超极本散热都很好。CPU和显卡是散热大户,CPU发热前边已经介绍了,显卡的发热就是跟随性能,指数增长,集成显卡发热可以忽略,GTX850M之类的,发热量比较均衡,不会烫手。GTX870m之流,不到90度都不叫高负荷。

总而言之,超薄和散热良好不可兼得,性能高跟散热良好不可兼得。又有性能,又薄,有散热好的,价格在15000以上,土豪可以考虑。

至于重量,3KG左右的本本,女生背起来负重较大,女汉子可选,男生可以忽视。2.5KG左右的本本男女老少皆宜。2KG一下的本本,适合土豪。

3.7 关于现在很流行的“游戏本”

相信最近看过广告的都知道,一些厂商的“游戏本”非常火爆,比如什么外星人,雷蛇灵刃,未来人类,雷神,机械革命,机械师,微星,神舟战神,宏碁A神,华硕ROG,联想大Y等等,上述产品基本都是性能强劲的游戏本,但是有一些其他笔记本则是真正的噱头。。。尤其是一些带着GT740M,GT840M的,配I3级别或者低电压CPU的,配15.6英寸屏幕带1366*768分辨率的,这种号称是“游戏本”的都是很坑爹的,能玩的游戏非常差非常少,当然,你要说LOL……集成显卡都能撸的毫无压力,这些伪游戏本倒是能胜任。

真正的游戏本,CPU和显卡对应价位都应该满足我在3.1,3.2中的描述,至于硬盘内存这种东西,加上500块能加装120G SSD,加上300块能升级到8G内存。对比价格的话,自己衡量。

游戏本也分等级的,大型3D游戏,大型单机游戏,需要I7级别cpu,GTX860M及其以上显卡

主流网游,I5,GTX850M之流就可以胜任。配置的选择要根据所玩的游戏来决定。

总而言之,这些游戏本,硬件配置不坑爹的话,是值得广大宅男购买的,对于女生的话,这类本本都外观霸气,个儿大,够重,女汉子可选。

3.8 关于品牌

品牌这东西,掺杂了很多个人观点,这段我说的仅仅是我个人的理解,不算太客观,仅供大家参考:第一部分,上边提到的游戏本,都是质量比较可靠的,配置比较均衡,性价比很高的。

当然对于一些非游戏爱好者中的图形设计视频制作需求者,这些本本也是很合适的,对于日常看个小片写个word来说,这些笔记本性能过剩严重,没有必要。

有人说神舟渣质量,其实神舟的这些游戏本都是蓝天代工自己贴牌的,质量还可以,但是用的都是低价模具,其中有一些模具设计有缺陷,散热通常比较差的,例如K590S系列。不过最近神舟新机已经不在使用这些,已经推荐妹子买过,散热还不错。
第二部分,联想的ThinkPad,戴尔。这两类都是质量很好,配置很低,价钱很贵的类型。尤其是戴尔,被称为“傻多戴”即人傻钱多买戴尔。其实这几年,这俩品牌也出了很多配置不错的高端办公商用本,买这些的大多是不差钱的商务人士,比如ThinkPad New X1 Carbon,戴尔Inspiron 灵越 17 7000等等,这些目测不是我们学生的菜。

第三部分,联想的ideapad,性能高中低档都有,选择范围较广,G系列主打入门办公,V系列主打时尚办公,Y系列是游戏本。他们的共同点是,性价比低,售后服务较好。

第四部分,惠普,索尼。这几个经常出现的是外观党,配置偏中低档,做工较好,外观设计丰富多彩,性价比一般。

第五部分,神舟,话说,宏碁。这些品牌主打性价比,配置较高,质量做工相对其他厂家较弱,但是近年来发展迅速,提升很快,可以一试。

第六部分,雷蛇灵刃,外星人,微星GS系列,GT系列:土豪专属,不差钱的值得你拥有

性能强劲能够满足任何工作的需求。

第七部分,苹果macbook。。。这个相信大家都明白,就不多解释了

关于品牌,纯属个人观点,如有雷同纯属巧合,请轻喷

购机步骤四:选择购买渠道

众位注意,根据以上描述,大家想必已经想到了买什么型号的笔记本了,那么接下来就是怎么买到手。

首先,分为网购和专卖店,还有大卖场。其中大卖场指的是中关村,华强北等地强烈推荐,不想死的别进去。

专卖店指的是分布于各地的品牌专卖店,这些地方买到的本本质量有保证,价钱稍贵,保修方便

网购的话,某东和某猫的质量可以基本保证,某东的到货快,发票全,某猫的价格便宜,种类全。至于某宝的小店,价钱最便宜,但是质量难以保证。
)。




CPU天梯图


 



显卡天梯图


 


posted @ 2015-02-01 23:34 paulwong 阅读(3053) | 评论 (2)编辑 收藏

性能测试资源

http://www.360doc.com/relevant/369752956_more.shtml





posted @ 2015-01-30 00:20 paulwong 阅读(373) | 评论 (0)编辑 收藏

几大NOSQL数据库性能比较

Apache Cassandra NoSQL Performance Benchmarks
http://planetcassandra.org/nosql-performance-benchmarks

NoSQL Benchmarking
http://www.cubrid.org/blog/dev-platform/nosql-benchmarking/


http://www.badrit.com/blog/2013/11/18/redis-vs-mongodb-performance#.VMpfW2SUfsg

How many requests per second can I get out of Redis?
http://skipperkongen.dk/2013/08/27/how-many-requests-per-second-can-i-get-out-of-redis/

redis性能测试,测试并发性能
http://my.oschina.net/pblack/blog/102394

posted @ 2015-01-30 00:16 paulwong 阅读(546) | 评论 (0)编辑 收藏

Apache自带的压力测试工具——ab初体验

     摘要:   我们知道压力测试的软件确实很多,诸如微软的WAST,惠普的LoadRunner以及等等其他的,但这些软件学习起来还是需要花费些时间,在选择上实在头痛,后来在郭欣的那本《构建高性能WEB站点》上看到了他介绍的这款Apache自带的压力测试工具ab,十分喜爱,于是今天终于有机会体验下ab对网站的压力测试。    实验之前我的apache已经安装了,操作系统:...  阅读全文

posted @ 2015-01-08 19:02 paulwong 阅读(1178) | 评论 (0)编辑 收藏

ab --- apache自带的压力测试工具 (apache benchmark )

简介
ab的全称是ApacheBench Apache 附带的一个小工具专门用于 HTTP Server benchmark testing可以同时模拟多个并发请求。前段时间看到公司的开发人员也在用它作一些测试,看起来也不错,很简单,也很容易使用,所以今天花一点时间看了一下。
通过下面的一个简单的例子和注释,相信大家可以更容易理解这个工具的使用。
一个简单的例子
/*在这个例子的一开始,我执行了这样一个命令 ab -n 10 -c 10 http://www.google.com/这个命令的意思是启动 ab ,向 www.google.com 发送10个请求(-n 10) ,并每次发送10个请求(-c 10)——也就是说一次都发过去了。跟着下面的是 ab 输出的测试报告,红色部分是我添加的注释。*/
C:\Program Files\Apache Software Foundation\Apache2.2\bin>ab -n 10 -c 10 http
://www.google.com/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 1997-2005 The Apache Software Foundation, http://www.apache.org/
Benchmarking www.google.com (be patient).....done
Server Software:        GWS/2.1
Server Hostname:        www.google.com
Server Port:            80
Document Path:          /
Document Length:        230 bytes
Concurrency Level:      10
/*整个测试持续的时间*/
Time taken for tests:   3.234651 seconds
/*完成的请求数量*/
Complete requests:      10
/*失败的请求数量*/
Failed requests:        0
Write errors:           0
Non-2xx responses:      10
Keep-Alive requests:    10
/*整个场景中的网络传输量*/
Total transferred:      6020 bytes
/*整个场景中的HTML内容传输量*/
HTML transferred:       2300 bytes
/*大家最关心的指标之一,相当于 LR 中的 每秒事务数 ,后面括号中的 mean 表示这是一个平均值*/
Requests per second:    3.09 [#/sec] (mean)
/*大家最关心的指标之二,相当于 LR 中的 平均事务响应时间 ,后面括号中的 mean 表示这是一个平均值*/
Time per request:       3234.651 [ms] (mean)
/*每个事物的响应时间 */
Time per request:       323.465 [ms] (mean, across all concurrent requests)
/*平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题*/
Transfer rate:          1.55 [Kbytes/sec] received
/*网络上消耗的时间的分解,各项数据的具体算法还不是很清楚*/
Connection Times (ms)
              min mean[+/-sd] median   max
Connect:       20 318 926.1     30    2954
Processing:    40 2160 1462.0   3034    3154
Waiting:       40 2160 1462.0   3034    3154
Total:         60 2479 1276.4   3064    3184
/*下面的内容为整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中 50 的用户响应时间小于 3064 毫秒,60  的用户响应时间小于 3094 毫秒,最大的响应时间小于 3184 毫秒*/
Percentage of the requests served within a certain time (ms)
50%   3064
66%   3094
75%   3124
80%   3154
90%   3184
95%   3184
98%   3184
99%   3184
100%   3184 (longest request)
参数详解
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是Apache超文本传输协议(HTTP)的性能测试工具。 其设计意图是描绘当前所安装的Apache的执行性能, 主要是显示你安装的Apache每秒可以处理多少个请求。
OPTIONS
-A auth-username:password
Supply BASIC Authentication credentials to the server. The user name and password are separated by a single : and sent on the wire base64 encoded. The string is sent regardless of whether the server needs it (i.e., has sent an 401 authentication needed).
对服务器提供BASIC认证信任。 用户名和密码由一个:隔开,并以base64编码形式发送。 无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-c concurrency
Number of multiple requests to perform at a time. Default is one request at a time.
一次产生的请求个数。默认是一次一个。
-C cookie-name=value
Add a Cookie: line to the request. The argument is typically in the form of a name=value pair. This field is repeatable.
对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。 此参数可以重复。
-d Do not display the "percentage served within XX [ms] table".
(legacy support).
不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
-e csv-file
Write a Comma separated value (CSV) file which contains for each percentage (from 1% to 100%) the time (in milliseconds) it took to serve that percentage of the requests. This is usually more useful than the 'gnuplot' file; as the results are already 'binned'.
产生一个以逗号分隔的(CSV)文件, 其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以毫秒为单位)时间。 由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
-g gnuplot-file
Write all measured values out as a 'gnuplot' or TSV (Tab separate values) file. This file can easily be imported into packages like Gnuplot, IDL, Mathematica, Igor or even Excel. The labels are on the first line of the file.
把所有测试结果写入一个'gnuplot'或者TSV (以Tab分隔的)文件。 此文件可以方便地导入到Gnuplot, IDL, Mathematica, Igor甚至Excel中。 其中的第一行为标题。
-h Display usage information.
显示使用方法。
-H custom-header
Append extra headers to the request. The argument is typically in the form of a valid header line, containing a colon-separated field-value pair (i.e., "Accept-Encoding: zip/zop;8bit").
对请求附加额外的头信息。 此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对 (如, "Accept-Encoding: zip/zop;8bit").
-i Do HEAD requests instead of GET.
执行HEAD请求,而不是GET。
-k Enable the HTTP KeepAlive feature, i.e., perform multiple
requests within one HTTP session. Default is no KeepAlive.
启用HTTP KeepAlive功能,即, 在一个HTTP会话中执行多个请求。 默认是不启用KeepAlive功能.
-n requests
Number of requests to perform for the benchmarking session. The default is to just perform a single request which usually leads to non-representative enchmarking results.
在测试会话中所执行的请求个数。 默认时,仅执行一个请求,但通常其结果不具有代表意义。
-p POST-file
File containing data to POST.
包含了需要POST的数据的文件.
-P proxy-auth-username:password
Supply BASIC Authentication credentials to a proxy en-route. The username and password are separated by a single : and sent on the wire base64 encoded. The string is sent regardless of whether the proxy needs it (i.e., has sent an 407 proxy authentication needed).
对一个中转代理提供BASIC认证信任。 用户名和密码由一个:隔开,并以base64编码形式发送。 无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-q When processing more than 150 requests, ab outputs a progress count on stderr every 10% or 100 requests or so. The -q flag will suppress these messages.
如果处理的请求数大于150, ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。 此-q标记可以抑制这些信息。
-s When compiled in (ab -h will show you) use the SSL protected https rather than the http protocol. This feature is experimental and very rudimentary. You probably do not want to use it.
用于编译中(ab -h会显示相关信息)使用了SSL的受保护的https, 而不是http协议的时候。此功能是实验性的,也是很简陋的。最好不要用。
-S Do not display the median and standard deviation values, nor display the warning/error messages when the average and median are more than one or two times the standard deviation apart. And default to the min/avg/max values. (legacy support).
不显示中值和标准背离值, 而且在均值和中值为标准背离值的1到2倍时,也不显示警告或出错信息。 默认时,会显示 最小值/均值/最大值等数值。(为以前的版本提供支持).
-t timelimit
Maximum number of seconds to spend for benchmarking. This implies a -n 50000 internally. Use this to benchmark the server within a fixed total amount of time. Per default there is no timelimit.
测试所进行的最大秒数。其内部隐含值是-n 50000。 它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-T content-type
Content-type header to use for POST data.
POST数据所使用的Content-type头信息。
-v verbosity
Set verbosity level - 4 and above prints information on headers, 3 and above prints response codes (404, 200, etc.), 2 and above prints warnings and info.
设置显示信息的详细程度 - 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。
-V Display version number and exit.
显示版本号并退出。
-w Print out results in HTML tables. Default table is two columns wide, with a white background.
以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-x <table>-attributes
String to use as attributes for <table>. Attributes are inserted <table here >.
设置<table>属性的字符串。 此属性被填入<table这里>.
-X proxy[:port]
Use a proxy server for the requests.
对请求使用代理服务器。
-y <tr>-attributes
String to use as attributes for <tr>.
设置<tr>属性的字符串.
-z <td>-attributes
String to use as attributes for <td>.
设置<td>属性的字符串.
BUGS
There are various statically declared buffers of fixed length. Combined with the lazy parsing of the command line arguments, the response headers from the server and other external inputs, this might bite you. It does not implement HTTP/1.x fully; only accepts some 'expected' forms of responses. The rather heavy use of strstr(3) shows up top in profile, which might indicate a performance problem; i.e., you would measure the ab performance rather than the server's.
程序中有各种静态声明的固定长度的缓冲区。另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。它没有完整地实现HTTP/1.x; 仅接受某些'预想'的响应格式。strstr(3)的频繁使用可能会带来性能问题,即, 你可能是在测试ab而不是服务器的性能。

posted @ 2015-01-08 18:38 paulwong 阅读(2041) | 评论 (0)编辑 收藏

修改LINUX能打开的文件的最大数


2、 修改目标
我们的目标是:让每一个用户登录系统后系统打开的最大文件数都是我们设定好的。
但我这里不得不说的是:非常遗憾,网上很多这方面关于ulimit设置修改资源限制的文章,但没一篇文章管用。
把这个目标分解为两个目标:

2.1、设置对root用户登录系统生效
这个目标可以实现起来不难

2.2、设置对所有用户生效
这个就非常麻烦了,弄不好还会把你的系统给整坏,因为要重编译Linux的内核才行!
所以权衡之下,我只实现了第一个目标,因为第二个目标的风险太大,我想如果我之前知道这点,那么我在装系统的时候我会先做这个处理,但现在我觉得已经晚了。

3、 修改的地方

3.1、修改/etc/security/limits.conf
通过 vi /etc/security/limits.conf修改其内容,在文件最后加入(数值也可以自己定义):
* soft nofile = 65536
* hard nofile = 65536
root soft nofile 65536
root hard nofile 65536
* 表示该配置对所有用户均有效,root用户要特别加两行。

3.2、修改/etc/profile
通过vi /etc/profile修改,在最后加入以下内容
ulimit -n 65536
然后重新登录即可生效了。

说明:
其实只修改/etc/profile就可以生效了,但我还是建议把/etc/security/limits.conf也修改一下。
最后强调的是,你如果要使得修改对所有用户都生效,那么现在看来你只能重新编译Linux的内核才行。

3.3 修改/etc/pam.d/login添加如下一行
session required /lib/security/pam_limits.so

posted @ 2015-01-07 11:36 paulwong 阅读(549) | 评论 (0)编辑 收藏

开源中国 2014 最受关注开源软件排行榜 TOP 50

开源中国 2014 年最受关注软件排行榜 TOP 50 正式出炉!2014 年结束了,我们来了解一下过去一年里开源中国最受欢迎的 50 款软件。此榜单是根据过去一年的用户访问、交流分享和项目本身的更新频度等诸多角度对收录于开源中国 33000+ 款开源软件进行统计,从而得出前 50 名最受欢迎的开源软件,仅供参考。

本排行榜主要是针对开源中国社区在 2014 年度最受欢迎的 50 款热门开源项目根据用户访问量、讨论和关注等角度进行筛选,从而得出前 50 名开源软件列表:

1. JFinal

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!

授权协议:Apache
源码下载:http://git.oschina.net/jfinal/jfinal

2. AngularJS

Angular JS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件。它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作。 AngularJS很小,只有60K,兼容主流浏览器,与 jQuery 配合良好。

授权协议:MIT
源码下载:https://github.com/angular/angular.js

3.  Bootstrap

Bootstrap是快速开发Web应用程序的前端工具包。它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等。

授权协议:MIT
源码下载:https://github.com/twbs/bootstrap

4.  Dubbo

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。

授权协议:Apache
源码下载:https://github.com/alibaba/dubbo

5.  Hadoop

Hadoop 是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。

授权协议:Apache
源码下载:http://mirror.bit.edu.cn/apache/

6.  jQuery Mobile

jQuery Mobile(jQueryMobile) 是 jQuery 在手机上和平板设备上的版本。jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。

授权协议:MIT/GPL
源码下载:https://github.com/jquery/jquery-mobile

7.  Nginx

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好。

授权协议:BSD
源码下载:http://nginx.org/en/download.html

8.  Qt

Qt 是一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。

授权协议:GPL/LGPL/QPL
源码下载:http://www.qt.io/download-open-source/

9.  禅道

禅道是第一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划 管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆 盖了项目管理的核心流程。

授权协议:LGPL
源码下载:http://git.oschina.net/wwccss/zentaopms

10.  Redmine

Redmine 是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示。同时它又支持多项目管理。Redmine是一个自由开放 源码软件解决方案,它提供集成的项目管理功能,问题跟踪,并为多个版本控制选项的支持。

授权协议:GPL
源码下载:https://github.com/redmine/redmine

11.  CKEditor

CKEditor 是新一代的 FCKeditor,是一个重新开发的版本。CKEditor是全球最优秀的网页在线文字编辑器之一,因其惊人的性能与可扩展性而广泛的被运用于各大网站。

授权协议:GPL/LGPL/MPL
源码下载:http://ckeditor.com/download

12.  TeamTalk

TeamTalk 是由蘑菇街开发的开源即时通讯解决方案,适用于中小型企业,提供可靠的消息传递机制;支持文字、图片、语音等富文本信息;文件收发等。

授权协议:Apache
源码下载:https://github.com/mogutt

13.  Afinal

Afinal 是一个 Android 的 Sqlite ORM 和 IOC 框架。同时封装了Android 中的 HTTP 框架,使其更加简单易用。Afinal 的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。

授权协议:Apache
源码下载:http://git.oschina.net/fuhai/afinal

14.  ECharts

ECharts 开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特 性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。

授权协议:BSD
源码下载:https://github.com/ecomfe/echarts

15.  Semantic UI

Semantic UI — 完全语义化的前端界面开发框架,跟  Bootstrap 和  Foundation 比起来,还是有些不同的,在功能特性上、布局设计上、用户体验上均存在很多差异。

授权协议:MIT
源码下载:https://github.com/Semantic-Org/Semantic-UI

16.  SWFUpload

SWFUpload 是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统 <input type="file"/> 标签的文件上传模式。

授权协议:MIT
源码下载:https://github.com/WordPress/secure-swfupload

17.  GoAgent

GoAgent 是一个使用Python和Google Appengine SDK编写的代理软件,goagent的初衷是弥补gappproxy的不足。

授权协议:GPL
源码下载:http://git.oschina.net/goagent/goagent

18.  Android Studio

Android Studio 是一个全新的 Android 开发环境,基于 IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。

授权协议:Apache
源码下载:http://developer.android.com/sdk/index.html

19.  Druid

Druid 是一个JDBC组件,它包括三部分:DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系;DruidDataSource 高效可管理的数据库连接池;SQLParser。

授权协议:Apache
源码下载:http://git.oschina.net/wenshao/druid

20.  Nagios

Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。

授权协议:GPL
源码下载:http://www.nagios.org/download/

21.  Amaze UI

Amaze UI 是中国首个开源 HTML5 跨屏前端框架。Amaze UI 是一个轻量级、Mobile first的前端框架, 基于开源社区流行前端框架编写。

授权协议:MIT
源码下载:http://git.oschina.net/amazeui/amazeui

22.  Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

授权协议:Apache
源码下载:https://github.com/docker/docker

23.  fastjson

fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。

授权协议:Apache
源码下载:http://git.oschina.net/wenshao/fastjson

24. CrossApp

CrossApp是一款完全开源、免费、跨平台的移动应用开发引擎 。CrossApp 采用 C++ 开发(即将支持 JS 和 Lua 编写),可直接导出 iOS 和 Android 原生应用,拥有高性能,多控件,开发速度快的优势。

授权协议:MIT
源码下载:http://git.oschina.net/9miao/CrossApp

25. Sonar

Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。

授权协议:LGPL
源码下载:https://github.com/SonarSource/sonarqube

26. xUtils

xUtils 最初源于  Afinal 框架,进行了大量重构,使得 xUtils 支持大文件上传,更全面的 http 请求协议支持(10 种谓词),拥有更加灵活的 ORM,更多的事件注解支持且不受混淆影响...

授权协议:Apache
源码下载:https://github.com/wyouflf/xUtils

27. TeamLab

TeamLab 是一个免费开源的商业协作和项目管理的平台。TeamLab 主要功能包括:项目管理、里程碑管理、任务、报表、事件、博客、论坛、书签、Wiki、即时消息等等。

授权协议:AGPL
源码下载:http://sourceforge.net/projects/teamlab/files/

28. memcached

memcached 是 一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但目前被许多软件(如MediaWiki)所使用。memcached具有多种语言的客户端 开发包,包括:Perl/PHP/JAVA/C/Python/Ruby/C#/MySQL/。

授权协议:BSD
源码下载:https://code.google.com/p/memcached/downloads/list

29. Magnolia

Magnolia CMS 是一家瑞士公司自 2003 年起发布的一个基于 Java 的开源内容管理系统。它适合且已被使用在以下领域:电子商务、银行、媒体娱乐政府、旅游、航空航天、工业制造、教育和保险

授权协议:GPL
源码下载:http://git.magnolia-cms.com/gitweb/

30. Django

Django 项目是一个定制 Python WEB 框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。

授权协议:BSD
源码下载:https://www.djangoproject.com/download/

31. zabbix

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。

授权协议:GPL
源码下载:http://www.zabbix.com/download.php

32. Kettle

Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

授权协议:LGPL
源码下载:http://sourceforge.net/projects/pentaho/files/Data%20Integration/

33. Node.js

Node.js 是一套用来编写高性能网络服务器的 JavaScript 工具包,一系列的变化由此开始。比较独特的是,Node.js 会假设你是在 POSIX 环境下运行它 Linux 或 Mac OS X。

授权协议:MIT
源码下载:http://nodejs.org/download/

34. MyBatis

MyBatis 的前身就是 iBatis 。是一个数据持久层(ORM)框架。在线Javadoc:http://tool.oschina.net/apidocs/apidoc?api=mybatis-3.1.1

授权协议:Apache
源码下载:https://github.com/mybatis/mybatis-3

35. TortoiseGit

TortoiseGit (海龟Git)是TortoiseSVNGit版本,tortoisegit用于迁移TortoiseSVN到TortoiseGit,一直以来Git在Windows平台没有好用GUI客户端,现在tortoisegit的出现给Windows开发者带来福音。

授权协议:GPL
源码下载:https://code.google.com/p/tortoisegit/

36. Openfire

Openfire 是实时的基于WEB的即时消息传输平台,是原来的Jive Messenger。

授权协议:Apache
源码下载:http://www.igniterealtime.org/downloads/index.jsp

37. ZUI

zui 是禅道项目管理软件团队在完善自己产品过程中形成的一个开源前端实践方案,帮助你快速构现代跨屏应用。简单美观,易于使用,快速构建简洁大方的现代web应用。

授权协议:MIT
源码下载:http://git.oschina.net/wwccss/zui

38. Cocos2d-x

Cocos2D-X 是全球知名的开源跨平台游戏引擎,易学易用,目前已经支持iOS、Android、Windows桌面、Mac OSX、Linux、BlackBerry、Windows Phone等平台。Cocos2d-JS统一了使用JS进行开发的开发体验,将HTML5引擎与JSB的API高度统一起来

授权协议:MIT
源码下载:http://www.cocos2d-x.org/download?project_id=cocos2d-x

39. D3.js

D3 是最流行的可视化库之一,它被很多其他的表格插件所使用。它允许绑定任意数据到DOM,然后将数据驱动转换应用到Document中。你可以使用它用一个数组创建基本的HTML表格,或是利用它的流体过度和交互,用相似的数据创建惊人的SVG条形图。

授权协议:MIT
源码下载:https://github.com/mbostock/d3

40. Twitter Storm

Twitter Storm 是一个分布式的、容错的实时计算系统。Storm 为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。

授权协议:EPL
源码下载:https://github.com/nathanmarz/storm

41. Redis

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

授权协议:BSD
源码下载:https://github.com/antirez/redis

42. Nutch

Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。

授权协议:Apache
源码下载:http://www.apache.org/dyn/closer.cgi/nutch/

43. PhoneGap

PhoneGap 是一款 HTML5 平台,通过它,开发商可以使用 HTML、CSS 及 JavaScript 来开发本地移动应用程序。因此,目前开发商可以只编写一次应用程序,然后在 7 个主要的移动平台和应用程序商店 (App Store) 里进行发布。

授权协议:Apache
源码下载:https://github.com/phonegap/phonegap

44. Mono

Mono 是一个由 Novell 公司主持的项目。该项目的目标是创建一系列符合ECMA 标准(Ecma-334 和Ecma-335)的.NET 工具,包括C# 编译器和共通语言执行平台。与微软的.NET Framework 不同,Mono 项目不仅可以运行于Windows 系统上,还可以运行于Linux,FreeBSD,Unix,Mac OS X 和Solaris。

授权协议:GPL/LGPL/MIT
源码下载:http://www.mono-project.com/

45. Seafile

Seafile 是新一代的开源云存储软件。它提供更丰富的文件同步和管理功能,以及更好的数据隐私保护和群组协作功能。Seafile 支持 Mac、Linux、Windows 三个桌面平台,支持 Android 和 iOS 两个移动平台。

授权协议:GPL
源码下载:http://git.oschina.net/lins05/seafile

46. ElasticSearch

Elastic Search 是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。

授权协议:Apache
源码下载:https://github.com/elasticsearch/elasticsearch

47. Tor

Tor 是一个帮助你抵御流量分析的软件项目, 流量分析是一种对网络的监视行为。Tor 将你的通信通过一个由遍及全球的志愿者运行的中继(relay)所组成的分布式网络转发, 以此来保护你的安全:它令监视你的 Internet 连接的那些人无法知道你所访问的站点, 它还令你所访问的站点无法知道你的物理位置。

授权协议:BSD
源码下载:https://www.torproject.org/

48. Cacti

Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数。

授权协议:GPL
源码下载:http://www.cacti.net/

49. GitLab

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。

授权协议:MIT
源码下载:https://github.com/gitlabhq/gitlabhq

50. Notepad++

Notepad++ 是一款非常有特色的编辑器,是开源软件,可以免费使用。支持的语言: C, C++ , Java , C#, XML, HTML, PHP, Javascript!

授权协议:GPL
源码下载:http://notepad-plus-plus.org/

posted @ 2015-01-07 00:08 paulwong 阅读(679) | 评论 (0)编辑 收藏

Mongodb 查询性能的事情

上一篇:Mongodb VS Mysql 查询性能,测试了 mongodb 与 mysql 的查询性能。结果说明 mongodb 性能可以, 可以代替 mysql 来使用。

但是这个测试都是在百万级别,我的场景在 KW 级别。所以还要对 mongodb 在 kw 级别下测试效果。

我测试环境是 4G 内存(有好些内存被其它程序占用),2kw 数据,查询随机生成 id(一次查询 20 个id)。

在这样的环境中测试不理想,比较失望。平均一次查询 500ms(比 mysql 还差,特别是在并发查询下,性能较差。很底的吞吐量)。查看其索引大小(用 db.mycoll.stats() 可以查询):2kw 数据中有 1.1G 左右的索引,存储的数据在 11G 左右。

测试过程中发现 iowait 占 50% 左右,看来还是 io 的瓶颈。还看到 mongodb 使用的内存不多(小于索引的大小,看来这机器不足够来测试)。

换了个有可用 6G 内存的机器。在 50 个并发下,可以达到平均 100 ms 左右,算比较满意,但是并发好像能力不够强。但这个性能不能由我控制,还由机器的可用内存控制。原因就是 mongodb 没有指定可占用的内存大小,它把所有空闲内存当缓存使用,既是优点也是缺点:优点--可以最大限度提升性能;缺点--容易受其它程序干扰(占用了它的缓存)。由我测试来看,它抢占内存的能力不强。mongodb 是用内存映射文件 vmm,官方的说明:

Memory Mapped Storage Engine

This is the current storage engine for MongoDB, and it uses memory-mapped files for all disk I/O. Using this strategy, the operating system's virtual memory manager is in charge of caching. This has several implications:

There is no redundancy between file system cache and database cache: they are one and the same.
MongoDB can use all free memory on the server for cache space automatically without any configuration of a cache size.
Virtual memory size and resident size will appear to be very large for the mongod process. This is benign: virtual memory space will be just larger than the size of the datafiles open and mapped; resident size will vary depending on the amount of memory not used by other processes on the machine.
Caching behavior (such as LRU'ing out of pages, and laziness of page writes) is controlled by the operating system: quality of the VMM implementation will vary by OS.
所以这么来看,我觉得 mongodb 没有指定内存大小来保证正常的缓存是个缺点。应该至少保证索引全部能放到内存中。但这个行为不是由启动程序决定,而是由环境决定(美中不足)。

官方也有段内容说到索引放到内存中:

If your queries seem sluggish, you should verify that your indexes are small enough to fit in RAM. For instance, if you're running on 4GB RAM and you have 3GB of indexes, then your indexes probably aren't fitting in RAM. You may need to add RAM and/or verify that all the indexes you've created are actually being used.

还是希望 mongodb 中可以指定内存大小,确保它有足够内存加载索引。

小结:大数据量下(kw级)mongodb 并发查询不够理想(100-200/s)。写数据很快(我的环境,远程提交近 1w/s,估计达到 1.5W/s 是没问题的,基本不受大数据量的影响)。

贴个测试数据:

1 id(内存使用 <1.5g) 10 id(内存使用 2-3g) 20 id(内存使用 >4g)
1 2 3 1 2 3 1 2 3
total time 17.136 25.508 17.387 37.138 33.788 25.143 44.75 31.167 30.678
1 thread thruput 583.5668 392.0339 575.1423 269.266 295.9631 397.725 223.4637 320.8522 325.9665
total time 24.405 22.664 24.115 41.454 41.889 39.749 56.138 53.713 54.666
5 thread thruput 2048.76 2206.142 2073.398 1206.156 1193.631 1257.893 890.6623 930.8733 914.6453
total time 27.567 26.867 28.349 55.672 54.347 50.93 72.978 81.857 75.925
10 thread thruput 3627.526 3722.038 3527.461 1796.235 1840.028 1963.479 1370.276 1221.643 1317.089
total time 51.397 57.446 53.81 119.386 118.015 76.405 188.962 188.034 138.839
20 thread thruput 3891.278 3481.53 3716.781 1675.238 1694.7 2617.63 1058.414 1063.637 1440.517
total time 160.038 160.808 160.346 343.559 352.732 460.678 610.907 609.986 1411.306
50 thread thruput 3124.258 3109.298 3118.257 1455.354 1417.507 1085.357 818.4552 819.6909 354.2818
total time 2165.408 635.887 592.958 1090.264 1034.057 1060.266 1432.296 1466.971 1475.061
100 thread thruput 461.8067 1572.606 1686.46 917.209 967.0647 943.1595 698.1797 681.6767 677.9381
上面的测试分别用三种查询(每次 1,10,20 id),在不同并发下测试3次,每次发出 1w 次查询。第一行数据为所有线程累加时间(单位 ms),第二行数据为吞吐量(1w /(total time / thread num))。测试中内存使用慢慢增加,所以后面的数据可能比较高效的(高效的环境)。

从上表看,10 - 20线程比较高的吞吐量。看到内存使用,前提就是索引加载到内存中,并有些内存作为缓存。

下面有个索引查询优化的 pdf。

Indexing and Query Optimizer

Indexing and Query Optimizer (Aaron Staple)
ps:

默认 mongodb 服务器只有10个并发,如果要提高它的连接数,可以用 --maxConns num 来提高它的接收并发的数据。

mongodb 的 java 驱动默认最多只有 10 并发连接池。要提高它,可以在 mongo.jar 的环境中加入 MONGO.POOLSIZE 系统参数,如 java -DMONGO.POOLSIZE=50 ...

posted @ 2015-01-06 23:39 paulwong 阅读(713) | 评论 (0)编辑 收藏

关于MongoDB最大连接数的查看与修改

在Linux平台下,无论是64位或者32位的MongoDB默认最大连接数都是819,WIN平台不知道,估计也没有人在 WIN平台下使用MongoDB做生产环境

[root@DELL113 mongodb-linux-i686-2.4.1]# mongo admin -u root -p password
MongoDB shell version: 2.4.1
connecting to: 192.168.6.42/admin
> db.serverStatus().connections
{ "current" : 1, "available" : 818, "totalCreated" : NumberLong(1) }

途中available显示818少了一个,表示空闲的。current表示已经占用了的连接数,两数一加就等于819,如果我现在在连接一个,那么available就是817,current就是2

[root@DELL113 mongodb-linux-i686-2.4.1]# ./bin/mongo 192.168.6.42
MongoDB shell version: 2.4.1
connecting to: 192.168.6.42/test
> db.serverStatus().connections
"current" : 1, "available" : 818, "totalCreated" : NumberLong(1) }
> db.serverStatus().connections
"current" : 2, "available" : 817, "totalCreated" : NumberLong(2) }

819个连接数对于一般的站点我认为已经够用,并且都是现连现取现断。但这个连接数也可以修改,只要在启动的时候加入--maxConns即可
服务器启动

[root@lee mongodb-linux-x86_64-2.4.1]# ./bin/mongod --dbpath=/root/db --maxConns=2000
Wed Apr 3 11:06:21.905 [initandlisten] MongoDB starting : pid=2812 port=27017 dbpath=/root/db 64-bit host=lee
Wed Apr 3 11:06:21.957 [initandlisten] db version v2.4.1
Wed Apr 3 11:06:21.957 [initandlisten] git version: 1560959e9ce11a693be8b4d0d160d633eee75110
Wed Apr 3 11:06:21.957 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Wed Apr 3 11:06:21.957 [initandlisten] allocator: tcmalloc
Wed Apr 3 11:06:21.957 [initandlisten] options: { dbpath: "/root/db", maxConns: 2000 }
Wed Apr 3 11:06:21.982 [initandlisten] journal dir=/root/db/journal
Wed Apr 3 11:06:21.982 [initandlisten] recover : no journal files present, no recovery needed
Wed Apr 3 11:06:22.297 [initandlisten] preallocateIsFaster=true 2.62
Wed Apr 3 11:06:22.717 [initandlisten] --maxConns too high, can only handle 819
Wed Apr 3 11:06:22.724 [initandlisten] waiting for connections on port 27017
Wed Apr 3 11:06:22.725 [websvr] admin web console waiting for connections on port 28017
Wed Apr 3 11:06:25.126 [initandlisten] connection accepted from 192.168.4.86:53917 #1 (1 connection now open)

查询最大连接数

[root@DELL113 mongodb-linux-i686-2.4.1]# ./bin/mongo 192.168.6.42
MongoDB shell version: 2.4.1
connecting to: 192.168.6.42/test
> db.serverStatus().connections
"current" : 1, "available" : 818, "totalCreated" : NumberLong(1) }

发现还是819?其实是Linux默认进程能打开最大文件数有关,可以通过ulimit 解决

[root@lee mongodb-linux-x86_64-2.4.1]# ulimit -n 2500
[root@lee mongodb-linux-x86_64-2.4.1]# ./bin/mongod --dbpath=/root/db --maxConns=2000
Wed Apr 3 11:11:07.013 [initandlisten] MongoDB starting : pid=2930 port=27017 dbpath=/root/db 64-bit host=lee
Wed Apr 3 11:11:07.013 [initandlisten] db version v2.4.1
Wed Apr 3 11:11:07.013 [initandlisten] git version: 1560959e9ce11a693be8b4d0d160d633eee75110
Wed Apr 3 11:11:07.013 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Wed Apr 3 11:11:07.013 [initandlisten] allocator: tcmalloc
Wed Apr 3 11:11:07.013 [initandlisten] options: { dbpath: "/root/db", maxConns: 2000 }
Wed Apr 3 11:11:07.031 [initandlisten] journal dir=/root/db/journal
Wed Apr 3 11:11:07.031 [initandlisten] recover : no journal files present, no recovery needed
Wed Apr 3 11:11:07.170 [initandlisten] waiting for connections on port 27017
Wed Apr 3 11:11:07.171 [websvr] admin web console waiting for connections on port 28017
Wed Apr 3 11:11:10.076 [initandlisten] connection accepted from 192.168.4.86:53161 #1 (1 connection now open)

再查看最大连接数,搞定

[root@DELL113 mongodb-linux-i686-2.4.1]# ./bin/mongo 192.168.6.42
MongoDB shell version: 2.4.1
connecting to: 192.168.6.42/test
> db.serverStatus().connections
"current" : 1, "available" : 1999, "totalCreated" : NumberLong(1) }

关于ulimit的更多知识大家可以去网上检索检索

客户端程序通常是通过DRIVER来链接,由于每次建立链接的成本都挺高,因此都用链接池来实现,SPRING DATA MONGODB中是如下配置
mongo.dbname=cms
#线程池的大小
mongo.connectionsPerHost=100
#这个*mongo.connectionsPerHost则是如果链接数大于100的等待xttk数
mongo.threadsAllowedToBlockForConnectionMultiplier=4
#等待线程的等待时间
mongo.maxWaitTime=1500
mongo.socketTimeout=1500
mongo.connectTimeout=1000
mongo.autoConnectRetry=true
mongo.socketKeepAlive=true
mongo.slaveOk=true


  • autoConnectRetry simply means the driver will automatically attempt to reconnect to the server(s) after unexpected disconnects. In production environments you usually want this set to true.

  • connectionsPerHost are the amount of physical connections a single Mongo instance (it's singleton so you usually have one per application) can establish to a mongod/mongos process. At time of writing the java driver will establish this amount of connections eventually even if the actual query throughput is low (in order words you will see the "conn" statistic in mongostat rise until it hits this number per app server).

    There is no need to set this higher than 100 in most cases but this setting is one of those "test it and see" things. Do note that you will have to make sure you set this low enough so that the total amount of connections to your server do not exceed

    db.serverStatus().connections.available

    In production we currently have this at 40.

  • connectTimeout. As the name suggest number of milliseconds the driver will wait before a connection attempt is aborted. Set timeout to something long (15-30 seconds) unless there's a realistic, expected chance this will be in the way of otherwise succesful connection attempts. Normally if a connection attempt takes longer than a couple of seconds your network infrastructure isn't capable of high throughput.

  • maxWaitTime. Number of ms a thread will wait for a connection to become available on the connection pool, and raises an exception if this does not happen in time. Keep default.

  • socketTimeout. Standard socket timeout value. Set to 60 seconds (60000).

  • threadsAllowedToBlockForConnectionMultiplier. Multiplier for connectionsPerHost that denotes the number of threads that are allowed to wait for connections to become available if the pool is currently exhausted. This is the setting that will cause the "com.mongodb.DBPortPool$SemaphoresOut: Out of semaphores to get db connection" exception. It will throw this exception once this thread queue exceeds the threadsAllowedToBlockForConnectionMultiplier value. For example, if the connectionsPerHost is 10 and this value is 5 up to 50 threads can block before the aforementioned exception is thrown.

    If you expect big peaks in throughput that could cause large queues temporarily increase this value. We have it at 1500 at the moment for exactly that reason. If your query load consistently outpaces the server you should just improve your hardware/scaling situation accordingly.

  • readPreference(UPDATED, 2.8+) Used to determine the default read preference and replaces "slaveOk". Set up a ReadPreference through one of the class factory method. A full description of the most common settings can be found at the end of this post

  • w(UPDATED, 2.6+) This value determines the "safety" of the write. When this value is -1 the write will not report any errors regardless of network or database errors. WriteConcern.NONE is the appropriate predefined WriteConcern for this. If w is 0 then network errors will make the write fail but mongo errors will not. This is typically referred to as "fire and forget" writes and should be used when performance is more important than consistency and durability. Use WriteConcern.NORMAL for this mode.

    If you set w to 1 or higher the write is considered safe. Safe writes perform the write and follow it up by a request to the server to make sure the write succeeded or retrieve an error value if it did not (in other words, it sends a getLastError() command after you write). Note that until this getLastError() command is completed the connection is reserved. As a result of that and the additional command the throughput will be signficantly lower than writes with w <= 0. With a w value of exactly 1 MongoDB guarantees the write succeeded (or verifiably failed) on the instance you sent the write to.

    In the case of replica sets you can use higher values for w whcih tell MongoDB to send the write to at least "w" members of the replica set before returning (or more accurately, wait for the replication of your write to "w" members). You can also set w to the string "majority" which tells MongoDB to perform the write to the majority of replica set members (WriteConcern.MAJORITY). Typicall you should set this to 1 unless you need raw performance (-1 or 0) or replicated writes (>1). Values higher than 1 have a considerable impact on write throughput.

  • fsync. Durability option that forces mongo to flush to disk after each write when enabled. I've never had any durability issues related to a write backlog so we have this on false (the default) in production.

  • j *(NEW 2.7+)*. Boolean that when set to true forces MongoDB to wait for a successful journaling group commit before returning. If you have journaling enabled you can enable this for additional durability. Refer to http://www.mongodb.org/display/DOCS/Journaling to see what journaling gets you (and thus why you might want to enable this flag).

ReadPreference The ReadPreference class allows you to configure to what mongod instances queries are routed if you are working with replica sets. The following options are available :

  • ReadPreference.primary() : All reads go to the repset primary member only. Use this if you require all queries to return consistent (the most recently written) data. This is the default.

  • ReadPreference.primaryPreferred() : All reads go to the repset primary member if possible but may query secondary members if the primary node is not available. As such if the primary becomes unavailable reads become eventually consistent, but only if the primary is unavailable.

  • ReadPreference.secondary() : All reads go to secondary repset members and the primary member is used for writes only. Use this only if you can live with eventually consistent reads. Additional repset members can be used to scale up read performance although there are limits to the amount of (voting) members a repset can have.

  • ReadPreference.secondaryPreferred() : All reads go to secondary repset members if any of them are available. The primary member is used exclusively for writes unless all secondary members become unavailable. Other than the fallback to the primary member for reads this is the same as ReadPreference.secondary().

  • ReadPreference.nearest() : Reads go to the nearest repset member available to the database client. Use only if eventually consistent reads are acceptable. The nearest member is the member with the lowest latency between the client and the various repset members. Since busy members will eventually have higher latencies this should also automatically balance read load although in my experience secondary(Preferred) seems to do so better if member latencies are relatively consistent.

Note : All of the above have tag enabled versions of the same method which return TaggableReadPreference instances instead. A full description of replica set tags can be found here :Replica Set Tags



参考网址:
http://api.mongodb.org/java/2.10.1/com/mongodb/MongoClientOptions.Builder.html#connectionsPerHost(int)
https://github.com/spring-projects/spring-data-mongodb/blob/master/spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-1.5.xsd

posted @ 2015-01-06 22:10 paulwong 阅读(5393) | 评论 (0)编辑 收藏

TOMCAT调优

  1. 安装AB
    rpm -ivh http://repo.webtatic.com/yum/centos/5/`uname -i`/webtatic-release-5-0.noarch.rpm
    yum install httpd-tools

  2. 使用AB
    ab -r -n 100000 -c 10000 http://10.120.151.223:8080/
    需加-r,则在收到SOCKET错误的时候不会退出
    这段的意思是发送100000个请求,其中并发是10000个

  3. 修改LINUX能打开的文件的最大数
    2、  修改目标
    我们的目标是:让每一个用户登录系统后系统打开的最大文件数都是我们设定好的。
    但我这里不得不说的是:非常遗憾,网上很多这方面关于ulimit设置修改资源限制的文章,但没一篇文章管用。
    把这个目标分解为两个目标:

    2.1、设置对root用户登录系统生效
    这个目标可以实现起来不难

    2.2、设置对所有用户生效
    这个就非常麻烦了,弄不好还会把你的系统给整坏,因为要重编译Linux的内核才行!
    所以权衡之下,我只实现了第一个目标,因为第二个目标的风险太大,我想如果我之前知道这点,那么我在装系统的时候我会先做这个处理,但现在我觉得已经晚了。

    3、  修改的地方

    3.1、修改/etc/security/limits.conf
    通过 vi /etc/security/limits.conf修改其内容,在文件最后加入(数值也可以自己定义):
    * soft  nofile = 65536
    * hard  nofile = 65536
    root soft nofile 65536
    root hard nofile 65536
    * 表示该配置对所有用户均有效,root用户要特别加两行。

    3.2、修改/etc/profile
    通过vi /etc/profile修改,在最后加入以下内容
    ulimit -n 65536
    然后重新登录即可生效了。
    说明:
    其实只修改/etc/profile就可以生效了,但我还是建议把/etc/security/limits.conf也修改一下。
    最后强调的是,你如果要使得修改对所有用户都生效,那么现在看来你只能重新编译Linux的内核才行。


  4. 安装APR,参考:http://jmchung.github.io/blog/2013/09/06/centos-installing-apache-portable-runtime-apr-for-tomcat/
    $ wget http://apache.fayea.com//apr/apr-1.5.1.tar.gz
    $ cd /path/to/tomcat/bin
    $ tar zxvf tomcat-native.tar.gz
    $ cd tomcat-native-x.y.z-src/jni/native
    $ ./configure --with-apr=/usr/local/apr --with-ssl=/usr/lib64/openssl
    $ make install

  5. 修改server.xml
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
            URIEncoding
    ="UTF-8"  
                  enableLookups
    ="false" 
                  tcpNoDelay
    ="true"
            compression
    ="on" compressionMinSize="2048"
            maxThreads
    ="20000" connectionTimeout="-1"
            compressableMimeType
    ="application/json,text/html,text/xml,text/javascript,text/css,text/plain" redirectPort="8443"/>


  6. https的也要修改:
    <Connector SSLEnabled="true" clientAuth="false"
            port
    ="8443" keystoreFile="/root/java/keystore/server.jks" keystorePass="123456"
            protocol
    ="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
            secure
    ="true" sslProtocol="TLS" 
        URIEncoding
    ="UTF-8"  minSpareThreads="25" maxSpareThreads="75"
               enableLookups
    ="false" disableUploadTimeout="true" connectionTimeout="20000"
        acceptCount
    ="1000"  maxThreads="1000" maxProcessors="1000" minProcessors="5"
        useURIValidationHack
    ="false" tcpNoDelay="true"
        compression
    ="on" compressionMinSize="2048"
        compressableMimeType
    ="application/json,text/html,text/xml,text/javascript,text/css,text/plain" />

  7. JVM启动参数
    JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

参考网址:
http://www.cnblogs.com/baibaluo/archive/2011/08/23/2150305.html
http://ifeve.com/tomcat-connector-tuning-2/
http://sndapk.blog.51cto.com/5385144/1306278

posted @ 2015-01-06 17:40 paulwong 阅读(512) | 评论 (0)编辑 收藏

仅列出标题
共115页: First 上一页 39 40 41 42 43 44 45 46 47 下一页 Last