会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 建站经验 > 性能调优攻略

性能调优攻略

时间:2012-06-21 18:30:55   作者:   来源:   点击:

4.3)网络调优

关于网络调优,尤其是TCP Tuning(你可以以这两个关头词在网上找到很多文章),这里面有很多很多东西可以说。看看Linux下TCP/IP的那么多参数就知道了(顺便说一下,你也许不喜欢Linux,可是你不克不及否定Linux给我们了很多可以进行内核调优的权力)。强烈建议年夜家看看《TCP/IP 详解 卷1:协议》这本书。我在这里只讲一些概念上的东西。

A) TCP调优

我们知道TCP链接是有很多开消的,一个是会占用文件描述符,另外一个是会开缓存,一般来讲一个系统可以支持的TCP链接数是有限的,我们需要清楚地认识到TCP链接对系统的开消是很年夜的。正是因为TCP是耗资源的,所以,很多抨击打击都是让你系统上呈现年夜量的TCP链接,把你的系统资源耗尽。比如著名的SYNC Flood抨击打击。

所以,我们要注意配置KeepAlive参数,这个参数的意思是定义一个时间,如果链接上没有数据传输,系统会在这个时间发一个包,如果没有收到回应,那么TCP就认为链接断了,然后就会把链接封闭,这样可以收受领受系统资源开消。(注:HTTP层上也有KeepAlive参数)对像HTTP这样的短链接,设置一个1-2分钟的keepalive很是重要。这可以在一定水平上避免DoS抨击打击。有下面几个参数(下面这些参数的值仅供参考):

1

4.4)系统调优

A)I/O模型

前面说到过select/poll/epoll这三个系统挪用,我们都知道,Unix/Linux下把所有的设备都当作文件来进行I/O,所以,那三个操作更应该算是I/O相关的系统挪用。说到 I/O模型,这对我们的I/O性能相当重要,我们知道,Unix/Linux经典的I/O体例是(关于Linux下的I/O模型,年夜家可以读一下这篇文章《使用异步I/O年夜年夜提高性能》):

第一种,同步阻塞式I/O,这个不说了。

第二种,同步无阻塞体例。其通过fctnl设置 O_NONBLOCK 来完成。

第三种,对select/poll/epoll这三个是I/O不阻塞,可是在事件上阻塞,算是:I/O异步,事件同步的挪用。

第四种,AIO体例。这种I/O 模型是一种措置与 I/O 并行的模型。I/O请求会当即返回,说明请求已经成功倡议了。在后台完成I/O操作时,向应用法度倡议通知,通知有两种体例:一种是产生一个信号,另外一种是执行一个基于线程的回调函数来完成这次 I/O 措置过程。

第四种因为没有任何的阻塞,无论是I/O上,仍是事件通知上,所以,其可让你充分地操纵CPU,比起第二种同步无阻塞益处就是,第二种要你一遍一遍地去轮询。Nginx之所所以高效,是其使用了epoll和AIO的体例来进行I/O的。

再说一下Windows下的I/O模型,

a)一个是WriteFile系统挪用,这个系统挪用可以是同步阻塞的,也可以是同步无阻塞的,关于看文件是不是以Overlapped打开的。关于同步无阻塞,需要设置其最后一个参数Overlapped,微软叫Overlapped I/O,你需要WaitForSingleObject才能知道有没有写完成。这个系统挪用的性能可想而知。

b)另外一个叫WriteFileEx的系统挪用,其可以实现异步I/O,并可让你传入一个callback函数,等I/O结束后回调之, 可是这个回调的过程Windows是把callback函数放到了APC(Asynchronous Procedure Calls)的队列中,然后,只用当应用法度当前线程成为可被通知状态(Alterable)时,才会被回调。只有当你的线程使用了这几个函数时WaitForSingleObjectEx, WaitForMultipleObjectsEx, MsgWaitForMultipleObjectsEx, SignalObjectAndWait 和 SleepEx,线程才会成为Alterable状态。可见,这个模型,仍是有wait,所以性能也不高。

c)然后是IOCP – IO Completion Port,IOCP会把I/O的成果放在一个队列中,可是,侦听这个队列的不是主线程,而是专门来干这个事的一个或多个线程去干(老的平台要你自己成立线程,新的平台是你可以成立一个线程池)。IOCP是一个线程池模型。这个和Linux下的AIO模型比较相似,可是实现体例和使用体例完全不一样。

当然,真正提高I/O性能体例是把和外设的I/O的次数降到最低,最好没有,所以,对读来讲,内存cache通常可以从质上提升性能,因为内存比外设快太多了。对写来讲,cache住要写的数据,少写几次,可是cache带来的问题就是实时性的问题,也就是latency会变年夜,我们需要在写的次数上和相应上做权衡。

B)多核CPU调优

分享到:

网友评论