连接数

select,epoll,poll比较

蹲街弑〆低调 提交于 2019-11-30 11:47:42
select,poll,epoll简介 select select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是: 1 单个进程可监视的fd 数量被限制 2 需要维护一个用来存放大量fd的数据结构,这样会使得用 户空间和内核空间在传递该结构时复制开销大 3 对socket进行扫描时是 线性扫描 poll poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后 查询每个fd对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就绪或者主动超时,被唤醒后它又要再次遍历fd。这个过程经历了多次无谓的遍历。 它 没有最大连接数的限制 ,原因是它是基于链表来存储的,但是同样有一个缺点: 大量的fd的数组被整体 复制于用户态和内核地址空间之间 ,而不管这样的复制是不是有意义。 poll还有一个特点是“水平触发” , 如果报告了fd后,没有被处理,那么下次poll时会再次报告该fd 。 epoll epoll支持水平触发和边缘触发,最大的特点在于边缘触发, 它只告诉进程哪些fd刚刚变为就需态,并且只会通知一次。 在前面说到的复制问题上,epoll使用mmap减少复制开销。 还有一个特点是, epoll使用“事件”的就绪通知方式,通过epoll_ctl注册fd

mysql连接数问题备份

大城市里の小女人 提交于 2019-11-30 04:30:26
这是是查询数据库当前设置的最大连接数 mysql> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 1000 | +-----------------+-------+ 可以在/etc/my.cnf里面设置数据库的最大连接数 [mysqld] max_connections = 1000 重启mysql即生效 临时修改连接数上限 set global max_connections=1000 重启后失效 #详细连接信息 show full processlist; 实战: /*--> */ /*--> */ vim /opt/lampp/etc/my.cnf /*--> */ /*--> */ #add by chong max_connections = 1000 /*--> */ /*--> */ /opt/lampp/lampp stopmysql /*--> */ /*--> */ /opt/lampp/lampp startmysql 来源: https://www.cnblogs.com/xingchong/p/11560056

[数据库连接池]mybatis/hikari/druid

倖福魔咒の 提交于 2019-11-30 03:46:44
mybatis连接池 使用Mybatis时请注意这两个参数,否则会让你的数据库连接爆掉 https://blog.csdn.net/chenwen_201116040110/article/details/46874725 poolMaximumActiveConnections poolMaximumIdleConnections poolMaximumActiveConnections是最大的活动连接数,活动连接,顾名思义,就是正在与数据库交互的连接,默认是10, poolMaximumIdleConnections是空闲连接数,就是没有处理请求的连接,默认是5 MyBatis配置文件配置数据库的参数中 最大连接数和任意时间存在的空闲连接数不能为空 https://blog.csdn.net/qq_25560423/article/details/73088397 poolMaximumActiveConnections org.apache.ibatis.datasource.pooled PooledDataSource.java protected int poolMaximumActiveConnections = 10; <property name="acquireIncrement" value="3"/> <!-- 连接不足时每次申请个数 -->

03.Nginx常用基础模块

。_饼干妹妹 提交于 2019-11-29 22:01:57
1.Nginx目录索引 ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求,并生成目录列表。 当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给模块。 1.指令 #启用或禁用目录列表输出,on开启,off关闭。 Syntax: autoindex on | off; Default: autoindex off; Context: http, server, location #指定是否应在目录列表中输出确切的文件大小,on显示字节,off显示大概单位。 Syntax: autoindex_exact_size on | off; Default: autoindex_exact_size on; Context: http, server, location #指定目录列表中的时间是应以本地时区还是UTC输出。on本地时区,off UTC时间。 Syntax: autoindex_localtime on | off; Default: autoindex_localtime off; Context: http, server, location 2.示例配置 [root@web ~]# cat /etc/nginx/conf.d/module.conf server { listen 80; server

Nginx防止DDOS攻击方案

你说的曾经没有我的故事 提交于 2019-11-29 21:54:02
一. 限制每秒请求数 ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制,就会返回503错误。配置需要在两个地方设置: nginx.conf的http段内定义触发条件,可以有多个条件 在location内定义达到触发条件时nginx所要执行的动作 例如: http { limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //触发条件,所有访问ip 限制每秒10个请求 ... server { ... location ~ \.php$ { limit_req zone=one burst=5 nodelay; //执行的动作,通过zone名字对应 } } } 参数说明: $binary_remote_addr 二进制远程地址 zone=one:10m 定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话 rate=10r/s; 限制频率为每秒10个请求 burst=5 允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制

MySql连接空闲8小时自动断开引起的问题

[亡魂溺海] 提交于 2019-11-29 18:04:57
转自: https://www.cnblogs.com/ay-a/p/10520425.html MySql连接空闲8小时自动断开引起的问题 一、问题描述 ​ 最近遇到了一个奇怪的MySql数据库问题,好几次前一天晚上历史数据还正常存储,第二天早上来了看实时数据存储还正常,历史数据不存储了。找了好久也没找到问题。后来仔细想了想,历史数据设置了变化才存储,是不是数据一直不变,就一直没有往数据库写数据,导致MySql的连接太久不用自动断开了。然后就百度了一下,Mysql空闲连接有效时长,一看都说是8个小时就自动断开了。嗯,有点感觉了,应该就是这个原因。 二、问题排查 根据查到的资料查看MySql 有两个参数,可以设定空闲连接的有效时长,分别是 interactive_timeout 和 wait_timeout ,可以在mysql配置文件中设置。根据这一点,可以来进行排查了。 使用 show variables like '%timeout%'; 命令查询以上两个参数的值,一查都是28800(单位是秒,刚好8小时)。 在mysql配置文件中修改 interactive_timeout 和 wait_timeout 都为100,这样连接100秒不使用就自动关闭了。 重启mysql服务,开始向数据库中插入数据,中间暂停3分钟(确保空闲连接已经断开),可以使用 show status

select、poll、epoll之间的区别

风流意气都作罢 提交于 2019-11-29 13:28:35
1、支持一个进程所能打开的最大连接数 select 单个进程所能打开的最大连接数有FD_SETSIZE宏定义,其大小是32个整数的大小(在32位的机器上,大小就是32 32,同理64位机器上FD_SETSIZE为32 64),当然我们可以对进行修改,然后重新编译内核,但是性能可能会受到影响,这需要进一步的测试。 poll poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的 epoll 虽然连接数有上限,但是很大,1G内存的机器上可以打开10万左右的连接,2G内存的机器可以打开20万左右的连接 2、FD剧增后带来的IO效率问题 select 因为每次调用时都会对连接进行线性遍历,所以随着FD的增加会造成遍历速度慢的“线性下降性能问题”。 poll 同上 epoll 因为epoll内核中实现是根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback,所以在活跃socket较少的情况下,使用epoll没有前面两者的线性下降的性能问题,但是所有socket都很活跃的情况下,可能会有性能问题。 3、 消息传递方式 select 内核需要将消息传递到用户空间,都需要内核拷贝动作 poll 同上 epoll epoll通过内核和用户空间共享一块内存来实现的。 总结: 综上,在选择select,p oll

redis-JedisPoolConfig配置

蓝咒 提交于 2019-11-29 09:59:01
edisPoolConfig config = new JedisPoolConfig(); //连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true config.setBlockWhenExhausted( true ); //设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数) config.setEvictionPolicyClassName( "org.apache.commons.pool2.impl.DefaultEvictionPolicy" ); //是否启用pool的jmx管理功能, 默认true config.setJmxEnabled( true ); //MBean ObjectName = new ObjectName("org.apache.commons.pool2:type=GenericObjectPool,name=" + "pool" + i); 默 认为"pool", JMX不熟,具体不知道是干啥的...默认就好. config.setJmxNamePrefix( "pool" ); //是否启用后进先出, 默认true config.setLifo( true ); //最大空闲连接数, 默认8个 config.setMaxIdle( 8 );

上线后数据库出现 too many connection问题

 ̄綄美尐妖づ 提交于 2019-11-29 09:55:06
Mysql 查看连接数,状态 最大并发数 发包后,程序出错,看到了大量的too many connection。。 这是数据库的没有做好优化导致,用mysql来说,他的默认最大连接数的150,如果不优化很快就会超负荷,导致无法继续调用,程序自然会出现错误。。 优化过程 1、进入数据库查看链接状态: mysql>show status like ‘Threads%’; mysql>show processlist; +——————-+——-+ | Variable_name | Value | +——————-+——-+ | Threads_cached | 58 | | Threads_connected | 40 | ###这个数值指的是打开的连接数 | Threads_created | 70 | | Threads_running | 1 | ###这个数值指的是激活的连接数,这个数值一般远低于connected数值 +——————-+——-+ 这两个命令返回参数差不多。 2、查看当前设置最大连接数: mysql>show variables like ‘%max_connections%’; +—————–+——-+ | Variable_name | Value | +—————–+——-+ | max_connections | 151 | +—————–+——-+