文档章节

源码解读如何提高RGW最大并发数

秦牧羊
 秦牧羊
发布于 2017/06/22 16:56
字数 303
阅读 103
收藏 0
点赞 0
评论 4

源码解读如何提高RGW最大并发数

以rgw服务的main()为入口,查看整个fastcgi的初始化过程,代码如下

#src/rgw/rgw_main.cc
int main(int argc, const char **argv)
    if (framework == "fastcgi" || framework == "fcgi") {
      RGWProcessEnv fcgi_pe = { store, &rest, olog, 0 };

      fe = new RGWFCGXFrontend(fcgi_pe, config);
      
    dout(0) << "starting handler: " << fiter->first << dendl;
    int r = fe->init(); #调用RGWFCGXFrontend的init()方法

再看init()方法构建了一个RGWFCGXProcess,并将rgw_thread_pool_size作为实参传递进去。

#src/rgw/rgw_frontend.h
class RGWFCGXFrontend : public RGWProcessFrontend {
public:
  RGWFCGXFrontend(RGWProcessEnv& pe, RGWFrontendConfig* _conf)
    : RGWProcessFrontend(pe, _conf) {}

  int init() {
    pprocess = new RGWFCGXProcess(g_ceph_context, &env,
				  g_conf->rgw_thread_pool_size, conf);
    return 0;
  }
}; 

默认rgw_thread_pool_size为100,代码定义如下

#src/common/config_opts.h
OPTION(rgw_thread_pool_size, OPT_INT, 100) 

通过RGWFCGXProcess的构造函数发现max_connections=num_threads + (num_threads >> 3),也就是说默认情况下max_connections=100+1=101,代码注释中也提到这是为了确保能够尽可能多的处理请求。

#src/rgw/rgw_process.h
class RGWFCGXProcess : public RGWProcess {
	int max_connections;
public:

  /* have a bit more connections than threads so that requests are
   * still accepted even if we're still processing older requests */
  RGWFCGXProcess(CephContext* cct, RGWProcessEnv* pe, int num_threads,
		 RGWFrontendConfig* _conf)
    : RGWProcess(cct, pe, num_threads, _conf),
      max_connections(num_threads + (num_threads >> 3))
    {}

  void run();
  void handle_request(RGWRequest* req);
};

所以num_threads控制着max_connections的数量,如果你想提高单个rgw进程的最大并发数量,需要调高rgw_thread_pool_size。

© 著作权归作者所有

共有 人打赏支持
秦牧羊
粉丝 69
博文 57
码字总数 28980
作品 0
广州
架构师
加载中

评论(4)

秦牧羊
秦牧羊

引用来自“dengxiafub”的评论

引用来自“秦牧羊”的评论

引用来自“dengxiafub”的评论

max_connections=num_threads + (num_threads >> 3),其中,num_threads=100,那么(num_threads >> 3 = 12 ?

回复@dengxiafub : 位移运算
@秦牧羊 那么max_connections的结果应该是max_connections=100+12=112 ?

回复@dengxiafub : y
dengxiafub
dengxiafub

引用来自“秦牧羊”的评论

引用来自“dengxiafub”的评论

max_connections=num_threads + (num_threads >> 3),其中,num_threads=100,那么(num_threads >> 3 = 12 ?

回复@dengxiafub : 位移运算
@秦牧羊 那么max_connections的结果应该是max_connections=100+12=112 ?
秦牧羊
秦牧羊

引用来自“dengxiafub”的评论

max_connections=num_threads + (num_threads >> 3),其中,num_threads=100,那么(num_threads >> 3 = 12 ?

回复@dengxiafub : 位移运算
dengxiafub
dengxiafub
max_connections=num_threads + (num_threads >> 3),其中,num_threads=100,那么(num_threads >> 3 = 12 ?
单机部署多CEPH-RGW的方法

引言 在高配置服务器,单个RGW的并发量无法充分使用机器的网络带宽资源,本文用于说明如何在单机上部署多RGW的方法。 如何使nginx和radosgw联合使用 如何使用配置多nginx,多radosgw 1.nginx...

西昆仑
2016/02/04
875
0
ConcurrentHashMap源码分析

前言 JDK中的Hashtable是一个线程安全的K-V形式的容器,它实现线程安全的原理十分简单,就是在所有涉及对该哈希表操作的方法上都加上了synchronized关键字,进行加锁操作。这么做实现了线程安...

Justlearn
2017/04/13
0
0
tomcat最大连接数修改

1 tomcat 的server.xml的路径vim /usr/local/tomcat/conf/server.xml 1.1 最大连接数相关 maxThreads:表示最多同时处理的连接(以上是50个)minSpareThreads:表示没有没有使用也开这么多空...

zjycff
2017/12/19
0
0
从使用到原理学习Java线程池

线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后...

umgsai
2016/09/08
0
0
引用 Tomcat中的几点配置技巧

引用 【轰隆隆】 的 Tomcat中的几点配置技巧 1,加大tomcat连接数 在tomcat配置文件server.xml中的配置中,和连接数相关的参数有: minProcessors:最小空闲连接线程数,用于提高系统处理性能...

junsun
2010/10/16
0
0
tomcat的内存及加大TOMCAT的连接数

如何加大tomcat的内存及加大TOMCAT的连接数 注: 如果在测试的时候可能会用Eclispe 这时候就需要在Eclipse ->run -arguments 中的VM arguments 中输入-Xms32m -Xmx800m这个参数就可以了。 项...

again-Y
2013/07/22
0
0
Node.js http.Agent实现真正的keep-Alive代理

一、 Kepp-Alive使用情况 1、当你的Server内存充足时,KeepAlive =On还是Off对系统性能影响不大。 2、当你的Server上静态网页(Html、图片、Css、Js)居多时,建议打开KeepAlive 。 3、当你的S...

造化玉碟
2014/05/06
3.1K
1
并发测试过程中,并发数量级设置

在做并发测试的时候,需要参考tomcat的maxThreads、acceptCount(最大线程数、最大排队数); tomcat 的Connector配置如下 <</span>Connector port="8080" protocol="HTTP/1.1"connectionTim......

搬砖小哥
2017/11/01
0
0
tomcat内存溢出问题记录

问题说明: 公司内网环境中部署的jenkins代码发版平台突然不能访问了,查看tomcat的catalina.out日志发现报错如下: 上面报错是由于tomcat内存溢出引起的: Tomcat默认可以使用的内存为128MB...

吞吞吐吐的
2017/10/11
0
0
ConcurrentHashMap源码跟踪记录

concurrentHashMap源码解读 主要理解几个问题1 ConcurrentHashMap如何实现分段锁2 存取数据是否读写分离 1 分段锁的实现 ①创建默认长度16的segments数组 ② put方法 1 从segments数组获取s...

xuklc
03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部