fastcgi相关jvm参数调优优有什么作用

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
最近要做些python的东西,初选了web.py这个精简框架。但是做了一些性能测试不太深意。
最简单的hello world程序,试过flup + spawn-fcgi + nginx,也试过uwsgi + nginx,但性能上实在觉得不太行。用ab压,3k-5k的qps,同样的机器,php 跑 nginx + fastcgi模式简简单单就跑到10k+了。
PS:机器是低配服务器,8G内存,16核
现在疑惑的是不知道有什么优化方面的事情可以做。包括框架层或者是python语言层面的。比如像php的eaccelerator这类东西。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
@iammutex 大,可以换gevent跑fcgi,但用web.py库试试……
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Python只能用一核,如果是这个原因,起多个,用nginx lb试试呢
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
用tornado吧。。。
性能很好。。
和web.py又很像。。。
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:优化Nginx中FastCGI参数实例
将下面代码添加到nginx 主配置文件中的http层级。
关于Nginx FastCGI的几个指令:
fastcgi_cache_path&/usr/local/Nginx/fastcgi_cache&levels=
1:2&keys_zone=TEST:10m&inactive=5m;&
这个指令为FastCGI缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。
fastcgi_connect_timeout&300;&
指定连接到后端FastCGI的超时时间。
fastcgi_send_timeout&300;&
向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。
fastcgi_read_timeout&300;&
接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
fastcgi_buffer_size&4k;&
指定读取FastCGI应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为4k,所以这里设置为4k。
fastcgi_buffers&8&4k;&
指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答,如上所示,如果一个php脚本所产生的页面大小为256k,则会为其分配16个16k的缓
冲区来缓存,如果大于256k,增大于256k的部分会缓存到fastcgi_temp指定的路径中,当然这对服务器负载来说是不明智的方案,因为内存中
处理数据速度要快于硬盘,通常这个值的设置应该选择一个你的站点中的php脚本所产生的页面大小的中间值,比如你的站点大部分脚本所产生的页面大小为
256k就可以把这个值设置为16 16k,或者4 64k 或者64
4k,但很显然,后两种并不是好的设置方法,因为如果产生的页面只有32k,如果用4
64k它会分配1个64k的缓冲区去缓存,而如果使用64 4k它会分配8个4k的缓冲区去缓存,而如果使用16
16k则它会分配2个16k去缓存页面,这样看起来似乎更加合理。
fastcgi_busy_buffers_size&8k;&
这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers的两倍。
fastcgi_temp_file_write_size&8k;&
在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍。
fastcgi_cache&TEST&
开启FastCGI缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低CPU负载,并且防止502错误。
fastcgi_cache_valid&200&302&1h;
fastcgi_cache_valid&301&1d;
fastcgi_cache_valid&any&1m;&
为指定的应答代码指定缓存时间,如上例中将200,302应答缓存一小时,301应答缓存1天,其他为1分钟。
fastcgi_cache_min_uses&1;&
缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数,如上例,如果在5分钟内某文件1次也没有被使用,那么这个文件将被移除。
fastcgi_cache_use_stale&error&timeout&invalid_header&http_500;&
不知道这个参数的作用,猜想应该是让Nginx
FastCGI知道哪些类型的缓存是没用的。以上为Nginx中FastCGI相关参数,另外,FastCGI自身也有一些配置需要进行优化,如果你使用php-fpm来管理FastCGI,可以修改配置文件中的以下值:
&value&name="max_children"&60&/value&&
同时处理的并发请求数,即它将开启最多60个子线程来处理并发连接。
&value&name="rlimit_files"&102400&/value&&
最多打开文件数。
&value&name="max_requests"&204800&/value&&
每个进程在重置之前能够执行的最多请求数。以上就是对Nginx FastCGI的详细介绍。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。1 & & &目的
完成基于大报文和小报文场景的Nginx压测方案设计,其在长连接和短连接的最佳并发模型测试结果如下表:
大报文在短连接场景QPS在1.8K左右,在长连接场景QPS在2.1K左右,提升16.5%;
小报文在短连接场景QPS在5.6K左右,在长连接场景QPS在11.8K左右,提升一倍;
Nginx到后端
2&&&&& 介绍&&&
在nginx的模块中,分为3种类型,分别是handler,filter和upstream,其中upstream可以看做一种特殊的handler,它主要用来实现和后端另外的服务器(php/jboss等)进行通信,由于在nginx中全部都是使用非阻塞,并且是一个流式的处理,所以upstream的实现很复杂。
upstream顾名思义,真正产生内容的地方在&上游&而不是nginx,也就是说nginx是位于client和后端的upstream之间的桥梁,在这种情况下,一个upstream需要做的事情主要有2个,第一个是当client发送http请求过来之后,需要创建一个到后端upstream的请求。第二个是当后端发送数据过来之后,需要将后端upstream的数据再次发送给client。&
2.1&&&&& Nginx Upstream连接后端有两种方式:短连接和长连接。&&&
Keep-Alive即俗称的长连接,使客户端到服务端建立的连接持续有效,当对服务器发起后续请求时,Keep-Alive功能可以复用先前使用过的连接,减少了重新建立连接所需的开销。通常使用HTTP协议采用的是请求应答模式,客户端到服务端的一次请求完成了,它们之间的连接也随之关闭。在某些应用场景下,比如后端RESTful服务,就需要保持住连接,这时就可以启用HTTP Keep-Alive。Nginx长连接的配置:
upstream backend-others {
&&&&&&&&&&& server 10.x.x.x max_fails=0 fail_timeout=10s;
&&&&&&&&&&& server 10.x.x.x:81 max_fails=0 fail_timeout=10s;& & & & & &
&&&&&&&&&&&&keepalive&20000;
location / {
&&&&&&&&&&&&&&&&&&& #防止502以及Timeout的发生
&&&&&&&&&&&&&&&&&&& proxy_connect_timeout 75;
&&&&&&&&&&&&&&&&&&& proxy_read_timeout 300;
&&&&&&&&&&&&&&&&&&& proxy_send_timeout 300;
&&&&&&&&&&&&&&&&&&& proxy_buffer_size 64k;
&&&&&&&&&&&&&&&&&&& proxy_buffers&& 4 64k;
&&&&&&&&&&&&&&&&&&& proxy_busy_buffers_size 128k;
&&&&&&&&&&&&&&&&&&& proxy_temp_file_write_size 128k;
&&&&&&&&&&&&&&&&&&&&proxy_http_version 1.1;
&&&&&&&&&&&&&&&&&&&&proxy_set_header Connection "";
&&&&&&&&&&&&&&&&&&& proxy_pass http://backend-
&&&&&&&&&&&&&&& }
1&&&server
定义服务器的地址address和其他参数parameters。&地址可以是域名或者IP地址,端口是可选的,或者是指定&unix:&前缀的UNIX域套接字的路径。如果没有指定端口,就使用80端口。&如果一个域名解析到多个IP,本质上是定义了多个server。还可以定义下面的参数:
1)&&weight=number&设定服务器的权重,默认是1。
2)&&max_fails=number&设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。&失败的尝试次数默认是1。设为0就会停止统计尝试次数,认为服务器是一直可用的。你可以通过指令proxy_next_upstream、&fastcgi_next_upstream和&memcached_next_upstream来配置什么是失败的尝试。&默认配置时,http_404状态不被认为是失败的尝试。
3)&&fail_timeout=time&设定统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。服务器被认为不可用的时间段。默认情况下,该超时时间是10秒。
4)&&Backup&标记为备用服务器。当主服务器不可用以后,请求会被传给这些服务器。
5)&&Down&标记服务器永久不可用,可以跟ip_hash指令一起使用。
2&&&默认的是RR轮询。
3&&&ip_hash
指定服务器组的负载均衡方法,请求基于客户端的IP地址在服务器间进行分发。&IPv4地址的前三个字节或者IPv6的整个地址,会被用来作为一个散列key。&这种方法可以确保从同一个客户端过来的请求,会被传给同一台服务器。除了当服务器被认为不可用的时候,这些客户端的请求会被传给其他服务器,而且很有可能也是同一台服务器。可以解决session和cookie的问题,但会导致负载不均衡。
4&&&keepalive
激活对上游服务器的连接进行缓存。connections参数设置每个worker进程与后端服务器保持连接的最大数量。这些保持的连接会被放入缓存。如果连接数大于这个值时,最久未使用的连接会被关闭。需要注意的是,keepalive指令不会限制Nginx进程与上游服务器的连接总数。&新的连接总会按需被创建。connections参数应该稍微设低一点,以便上游服务器也能处理额外新进来的连接。
1)&&对于HTTP代理,proxy_http_version指令应该设置为&1.1&,同时&Connection&头的值也应被清空。
2)&&另外一种选择是,HTTP/1.0协议的持久连接也可以通过发送&Connection: Keep-Alive&头来实现。不过不建议这样用。
3)&&对于FastCGI的服务器,需要设置&fastcgi_keep_conn&指令来让连接keepalive工作。当使用的负载均衡方法不是默认的轮转法时,必须在keepalive&指令之前配置。
5&&&proxy_connect_timeout&
默认是60s,设置与后端服务器建立连接的超时时间。应该注意这个超时一般不可能大于75秒。
proxy_read_timeout默认60s,定义从后端服务器读取响应的超时。此超时是指相邻两次读操作之间的最长时间间隔,而不是整个响应传输完成的最长时间。如果后端服务器在超时时间段内没有传输任何数据,连接将被关闭。
6&&&proxy_send_timeout
默认60s,&定义向后端服务器传输请求的超时。此超时是指相邻两次写操作之间的最长时间间隔,而不是整个请求传输完成的最长时间。如果后端服务器在超时时间段内没有接收到任何数据,连接将被关闭。
7&&&proxy_buffer_size
设置缓冲区的大小为size。nginx从被代理的服务器读取响应时,使用该缓冲区保存响应的开始部分。这部分通常包含着一个小小的响应头。该缓冲区大小默认等于proxy_buffers指令设置的一块缓冲区的大小,但它也可以被设置得更小。
8&&&proxy_buffers为每个连接设置缓冲区的数量为number,每块缓冲区的大小为size。这些缓冲区用于保存从被代理的服务器读取的响应。每块缓冲区默认等于一个内存页的大小。这个值是4K还是8K,取决于平台。
9&&&proxy_busy_buffers_size
当开启缓冲响应的功能以后,在没有读到全部响应的情况下,写缓冲到达一定大小时,nginx一定会向客户端发送响应,直到缓冲小于此值。这条指令用来设置此值。&同时,剩余的缓冲区可以用于接收响应,如果需要,一部分内容将缓冲到临时文件。该大小默认是proxy_buffer_size和proxy_buffers指令设置单块缓冲大小的两倍。
10&&proxy_temp_file_write_size
在开启缓冲后端服务器响应到临时文件的功能后,设置nginx每次写数据到临时文件的size(大小)限制。&size的默认值是proxy_buffer_size指令和proxy_buffers指令定义的每块缓冲区大小的两倍,&而临时文件最大容量由proxy_max_temp_file_size指令设置。
2.2&&&&& 后端服务器的配置&&&
Server.xml
Connector标签下的maxKeepAliveRequests
Server模块
keepalive_requests
修改相应的值以适应Nginx Upstream的配置需求,如Nginx的keepalive_requests配置为20000。而在Tomcat中的maxKeepAliveRequests官方建议最大值是200,请根据实际需求测试结果来配置。
upstream backend-others {
&&&&&&&&&&& server 10.123.73.242:81 max_fails=0 fail_timeout=10s;
&&&&&&&&&&& server 10.123.73.244:81 max_fails=0 fail_timeout=10s;
&&&&&&&&&&& server 10.123.73.245:81 max_fails=0 fail_timeout=10s;
&&&&&&&&&&& server 10.123.73.246:81 max_fails=0 fail_timeout=10s;
&&&&&&&&&&& server 10.123.73.248:81 max_fails=0 fail_timeout=10s;
&&&&&&&&&&& server 10.123.73.249:81 max_fails=0 fail_timeout=10s;
&&&&&&&&&&& server 10.123.73.247:81 max_fails=0 fail_timeout=10s;
&&&&&&&&&&&&keepalive&20000;
location / {
&&&&&&&&&&&&&&&&&&& #防止502以及Timeout的发生
&&&&&&&&&&&&&&&&&&& proxy_connect_timeout 75;
&&&&&&&&&&&&&&&&&&& proxy_read_timeout 300;
&&&&&&&&&&&&&&&&&&& proxy_send_timeout 300;
&&&&&&&&&&&&&&&&&&& proxy_buffer_size 64k;
&&&&&&&&&&&&&&&&&&& proxy_buffers&& 4 64k;
&&&&&&&&&&&&&&&&&&& proxy_busy_buffers_size 128k;
&&&&&&&&&&&&&&&&&&& proxy_temp_file_write_size 128k;
&&&&&&&&&&&&&&&&&&&&proxy_http_version 1.1;
&&&&&&&&&&&&&&&&&&&&proxy_set_header Connection "";
&&&&&&&&&&&&&&&&&&& proxy_pass http://backend-
&&&&&&&&&&&&&&& }
1&&&server定义服务器的地址address和其他参数parameters。&地址可以是域名或者IP地址,端口是可选的,或者是指定&unix:&前缀的UNIX域套接字的路径。如果没有指定端口,就使用80端口。&如果一个域名解析到多个IP,本质上是定义了多个server。还可以定义下面的参数:
1)&&weight=number&设定服务器的权重,默认是1。
2)&&max_fails=number&设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。&失败的尝试次数默认是1。设为0就会停止统计尝试次数,认为服务器是一直可用的。你可以通过指令proxy_next_upstream、&fastcgi_next_upstream和&memcached_next_upstream来配置什么是失败的尝试。&默认配置时,http_404状态不被认为是失败的尝试。
3)&&fail_timeout=time&设定统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。服务器被认为不可用的时间段。默认情况下,该超时时间是10秒。
4)&&Backup&标记为备用服务器。当主服务器不可用以后,请求会被传给这些服务器。
5)&&Down&标记服务器永久不可用,可以跟ip_hash指令一起使用。
2&&&默认的是RR轮询。
3&&&ip_hash指定服务器组的负载均衡方法,请求基于客户端的IP地址在服务器间进行分发。&IPv4地址的前三个字节或者IPv6的整个地址,会被用来作为一个散列key。&这种方法可以确保从同一个客户端过来的请求,会被传给同一台服务器。除了当服务器被认为不可用的时候,这些客户端的请求会被传给其他服务器,而且很有可能也是同一台服务器。可以解决session和cookie的问题,但会导致负载不均衡。
4&&&keepalive激活对上游服务器的连接进行缓存。connections参数设置每个worker进程与后端服务器保持连接的最大数量。这些保持的连接会被放入缓存。如果连接数大于这个值时,最久未使用的连接会被关闭。需要注意的是,keepalive指令不会限制Nginx进程与上游服务器的连接总数。&新的连接总会按需被创建。connections参数应该稍微设低一点,以便上游服务器也能处理额外新进来的连接。
1)&&对于HTTP代理,proxy_http_version指令应该设置为&1.1&,同时&Connection&头的值也应被清空。
2)&&另外一种选择是,HTTP/1.0协议的持久连接也可以通过发送&Connection: Keep-Alive&头来实现。不过不建议这样用。
3)&&对于FastCGI的服务器,需要设置&fastcgi_keep_conn&指令来让连接keepalive工作。当使用的负载均衡方法不是默认的轮转法时,必须在keepalive&指令之前配置。
5&&&proxy_connect_timeout&默认是60s,设置与后端服务器建立连接的超时时间。应该注意这个超时一般不可能大于75秒。
proxy_read_timeout默认60s,定义从后端服务器读取响应的超时。此超时是指相邻两次读操作之间的最长时间间隔,而不是整个响应传输完成的最长时间。如果后端服务器在超时时间段内没有传输任何数据,连接将被关闭。
6&&&proxy_send_timeout默认60s,&定义向后端服务器传输请求的超时。此超时是指相邻两次写操作之间的最长时间间隔,而不是整个请求传输完成的最长时间。如果后端服务器在超时时间段内没有接收到任何数据,连接将被关闭。
7&&&proxy_buffer_size设置缓冲区的大小为size。nginx从被代理的服务器读取响应时,使用该缓冲区保存响应的开始部分。这部分通常包含着一个小小的响应头。该缓冲区大小默认等于proxy_buffers指令设置的一块缓冲区的大小,但它也可以被设置得更小。
8&&&proxy_buffers为每个连接设置缓冲区的数量为number,每块缓冲区的大小为size。这些缓冲区用于保存从被代理的服务器读取的响应。每块缓冲区默认等于一个内存页的大小。这个值是4K还是8K,取决于平台。
9&&&proxy_busy_buffers_size当开启缓冲响应的功能以后,在没有读到全部响应的情况下,写缓冲到达一定大小时,nginx一定会向客户端发送响应,直到缓冲小于此值。这条指令用来设置此值。&同时,剩余的缓冲区可以用于接收响应,如果需要,一部分内容将缓冲到临时文件。该大小默认是proxy_buffer_size和proxy_buffers指令设置单块缓冲大小的两倍。
10&&proxy_temp_file_write_size在开启缓冲后端服务器响应到临时文件的功能后,设置nginx每次写数据到临时文件的size(大小)限制。&size的默认值是proxy_buffer_size指令和proxy_buffers指令定义的每块缓冲区大小的两倍,&而临时文件最大容量由proxy_max_temp_file_size指令设置。
&&&[ 回目录 ]2.2&&&&& 后端服务器的配置&&&
Server.xml
Connector标签下的maxKeepAliveRequests
Server模块
keepalive_requests
修改相应的值以适应Nginx Upstream的配置需求,如Nginx的keepalive_requests配置为20000。而在Tomcat中的maxKeepAliveRequests官方建议最大值是200,请根据实际需求测试结果来配置。
阅读(...) 评论()你可能感兴趣的
大家都喜欢的
阅读 947 次
阅读 2,620 次
阅读 2,768 次
阅读 175,161 次
随便逛逛吧
最受欢迎的}

我要回帖

更多关于 修改fastcgi参数配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信