连接数

mysql5.7出现大量too many connections及too many open files错误,且配置最大连接数未生效

自作多情 提交于 2020-02-03 03:25:41
too many connections是由于mysql配置中连接数过少,不足以支撑当前的并发数,too many open files是由于mysql open_files_limit的值大小不够。 最开始mysql日志出现的错误为too many connections,mysql配置文件已经配置了最大连接数max_connections=2000,登录到mysql中,查看mysql连接收:show processlist; (查看详细执行信息使用:show full processlist;),发现线程数只有500多,并没有达到配置文件中的最大配置,登录mysql查看其生效的最大连接数及mysql open_files_limit mysql> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 214 | +-----------------+-------+ 1 row in set (0.00 sec) mysql> show variables like '%open_files_limit%'; +------------------+

9.semaphore

十年热恋 提交于 2020-02-03 03:22:12
semaphore信号量 控制同时访问某个特定资源的线程数量,用在流量控制 这像是一种锁的机制,acquire()像是获取锁的机制,这里我们叫他许可证,如果获取不到则阻塞,但是一般锁只允许一个线程同时访问,而semaphore可以同时多个(只要有许可证的存在),当业务执行完毕,你需要增加许可证的个数,当然了,你也可以不增加,但是这样的业务需求似乎不存在,release()可新增一个许可证。 下面模拟数据库链接的代码演示: package semaphore ; import java . sql . Connection ; import java . util . LinkedList ; import java . util . concurrent . Semaphore ; public class DBPoolSemaphore { private final static int POOL_SIZE = 10 ; private final Semaphore useful , useless ; //useful表示可用的数据库连接,useless表示已用的数据库连接 public DBPoolSemaphore ( ) { this . useful = new Semaphore ( POOL_SIZE ) ; //10个可用的许可证 this . useless

Docker搭建的MySQL容器出现 \"Too many connections 1040\" 最大连接数修改完未生效的解决方案

妖精的绣舞 提交于 2020-02-03 03:04:09
原文: Docker搭建的MySQL容器出现 "Too many connections 1040" 最大连接数修改完未生效的解决方案 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39835887/article/details/86071545 一、背景 前几天在测试线上环境的过程中,需要一直关注数据库的数据变化。由于线上的MySQL是用Docker搭建的,在本地连接时经常出现 "Too many connections" , 在百度上找了很久,找不到关于Docker环境下MySQL的设置问题。最后通过英文在Google上才找到Stackover上的一条解决方案,分享一下! 二、原因分析 1、使用Docker后,默认将MySQL的连接数设置为214,修改后不起作用 2、在my.ini中设置max_connections参数均无效 三、解决方案 解除Docker最大连接数限制有两种解决方案,具体使用哪种,请结合你的Docker环境! 第一种:在Docker启动容器时该参数: (适用于未使用DockerFile镜像构建文件和docker-compose文件构建的环境) --ulimit nofile=65536:65536 第二种:修改Docker启动脚本实现:

MySQL自增id溢出

北战南征 提交于 2020-01-29 19:48:42
前言 线上推送业务的数据库出现连接数激增,同时出现推送内容丢失。综合两种情况,查询推送表发现自增id已经增加到21亿+。初步判断应该是自增id过多影响连接数,但是有多个问题不太理解(如自增id为什么不连续、int(11)会在多大数据时溢出、为什么溢出后会出现mysql连接数激增),所以写下这篇文章加深理解。 自增id为什么不是连续的 唯一键冲突 事务回滚 批量插入,分配自增id不连续 对于批量插入数据的语句,MySQL 有一个批量申请自增 id 的策略: * 语句执行过程中,第一次申请自增 id,会分配 1 个; * 1 个用完以后,这个语句第二次申请自增 id,会分配 2 个; * 2 个用完以后,还是这个语句,第三次申请自增 id,会分配 4 个; * 依此类推,同一个语句去申请自增 id,每次申请到的自增 id 个数都是上一次的两倍。 如果一次性批量插入4组数据,此时会申请7个自增id,多余的3个就浪费了,所以会出现不连续的情况。 int(11)会在多大数据时溢出 如果根据int(11),认为自增id超过99999999999才会溢出是有问题的。整数型和字符型不同,长度是固定的,也就是说int(1)和int(11)储存的最大值是一样的。数据的最大值只和类型有关(tinyint, int, bigint)和括号内的数字无关。各类型的最大长度如下 类型 字节数 范围

centos linux服务器apache+mysql环境访问慢优化方法

旧街凉风 提交于 2020-01-29 17:40:35
一、优化apache配置增加MaxClients的值 默认情况下,2.0及以上apache版本MaxClients的值为256,对于中大型应用访问是远远不够的。 在Apache2.0中,可以通过在httpd.conf配置的perfork代码段内修改ServerLimit和MaxClients参数来突破256的限制,此时必须MaxClients ≤ ServerLimit ≤ 20000 设置完之后大致是这样的: ServerLimit 1000 StartServers 30 MinSpareServers 30 MaxSpareServers 45 MaxClients 1000 MaxRequestsPerChild 4000 ============================== 附常用的查看进程数量命令: 1、查看apache当前并发访问数:  netstat -an | grep ESTABLISHED | wc -l 对比httpd.conf中MaxClients的数字差距多少。 2、查看有多少个进程数: ps aux|grep httpd|wc -l 3、可以使用如下参数查看数据 server-status?auto #ps -ef|grep httpd|wc -l 1388 统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。

详解tomcat的连接数与线程池

ぃ、小莉子 提交于 2020-01-27 06:33:36
详解tomcat的连接数与线程池 1、Connector的protocol Connector在处理HTTP请求时,会使用不同的protocol。不同的Tomcat版本支持的protocol不同,其中最典型的protocol包括BIO、NIO和APR(Tomcat7中支持这3种,Tomcat8增加了对NIO2的支持,而到了Tomcat8.5和Tomcat9.0,则去掉了对BIO的支持)。 BIO是Blocking IO,顾名思义是阻塞的IO;NIO是Non-blocking IO,则是非阻塞的IO。而APR是Apache Portable Runtime,是Apache可移植运行库,利用本地库可以实现高可扩展性、高性能;Apr是在Tomcat上运行高并发应用的首选模式,但是需要安装apr、apr-utils、tomcat-native等包。 2、如何指定protocol Connector使用哪种protocol,可以通过元素中的protocol属性进行指定,也可以使用默认值。 指定的protocol取值及对应的协议如下: HTTP/1.1:默认值,使用的协议与Tomcat版本有关 org.apache.coyote.http11.Http11Protocol:BIO org.apache.coyote.http11.Http11NioProtocol:NIO org.apache

公众号笔记: 2018年12月

浪尽此生 提交于 2020-01-27 04:01:13
1、web登录的安全性    现阶段安全的方式:数字签名 发送方:报文 + 签名(私人秘钥加密---哈希函数对报文生成报文摘要) 接收方:相同哈希函数从报文中计算得到报文摘要,再用公用秘钥解密签名得到报文摘要 结合了:非对称秘钥加解密 + 数字摘要 例子:username+MD5(password) + token 通过签名,得到checkCode发送给服务器,服务器经过对原始数据签名运算,与checkCode对比。 2、mysql错误案例   1)、 too many connections --- 连接数太多,导致连接不上数据库,业务无法正常运行 思路:连接数太多而服务崩溃,是不是我们的设置的最大连接数max_connections参数的值设计的太小。一般该字段有默认值151,我们可以设置更大。(但是有可能发生,数据库支撑不了所设置的最大连接数的连接而崩溃) 其次我们可以将并发处理数量innodb_thread_concurrency = 0(0代表不限制)降低到64/16等。   2)、主从复制报错, Last_SQL_Errno:1062 --- 从库与主库数据冲突 思路:是不是在从库中操作报错。 发现是从库中进行了一条针对有主键的表的sql语句插入,主库中再插入相同sql,主从复制,复制前主库和从库就已经有相同的2条数据,所以报错。 解决方法:主从数据一致

运维之道 | LVS原理详解

 ̄綄美尐妖づ 提交于 2020-01-27 01:15:24
LVS原理详解及部署 一、LVS简介 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。 二、LVS基本原理 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间。 PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链。 IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链。 POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。 三、LVS组成 LVS 由2部分程序组成,包括 ipvs 和 ipvsadm IPVS(ip virtual server) :一段代码工作在内核空间,叫IPVS,是真正生效实现调度的代码。IPVS的总体结构主要由 IP包处理、负载均衡算法、系统配置与管理 三个模块及 虚拟服务器与真实服务器链表 组成。 ipvsadm

IE6的连接数限制问题

浪尽此生 提交于 2020-01-25 21:35:51
  今天解决了一个bug。看似是UI的bug,最后发现IE的设置问题(严格来说,IE6这么做没有问题,因为HTTP协议的规范如此)。   先描述一下问题: 有一个页面管理Job,选中一些Job可以Run,每次只能启动一个。还有另一个页面通过Timer定时发Ajax请求服务端,查询并显示Job的运行状况(进度)。   奇怪的问题出现了:   1)在FireFox和IE8运行正常(貌似正常,稍后再解释)。其他浏览器未测试。   2)IE6,7及更早版本,Timer无法检测到多于1个的Job运行。   先检查了一遍代码,Timer的控制没有问题。不行就使用Fiddler吧。刚好是IE的问题。   观察HTTP发现一个现象,运行Job的HTTP似乎没有成功,因为Body是-1,之后是每隔一秒的Timer发起的HTTP。如果再启动一个Job,发现Timer停止了!!   等待第一个Job运行成功之后,Timer又恢复了(重新发送Ajax请求)!! 似乎是运行Job的请求阻塞了(实际上该请求长时间没有返回,因为运行Job需要几分钟甚至更多时间)。 为啥不使用DWR3.0的Push技术?后来跟同事讨论明白,这不过是把Timer从客户端转移到了服务端。 记起来了,俺好像读DWR源代码的时候(当时对如何实现推非常感兴趣),见过一段代码分析Browser的类型和连接数,有的情况还抛出了异常。