Linux、mysql、tomcat大并发下的配置

标签: linux mysql tomcat | 发表时间:2015-10-20 09:00 | 作者:langmnm
出处:http://www.iteye.com
一、前言
    因为之前一直没太接触过项目实现部署的问题,所以中间出现了N多问题,现在有时间了,做了一个整理,已备后用。此处不包括上一层服务器的负载,如使用nginx/apache等。

二、实现
mysql:
1. 最大连接数:
配置项目中的连接池最大连接数 <= mysql的max_connections(如项目有集群,则乘N)
可解决出现:MySQL 提示 Too many connections ( 1040 )
SELECT @@max_connections; -- 查看现有设置数量

临时解决方案:
set global max_connections = 3600; -- 重启后失效

最终解决方案:
1)首先修改/etc/my.cnf(Ubuntu 10下为/etc/mysql/my.cnf)
Linux: vi /etc/my.cnf

2)在[mysqld]最后增加一行
max_connections=5000

3)重新启动mysql
Linux: service mysqld start


2. 序列
非主键的WHERE条件,则可增加序列。

3. 数据类型
相关联的两表中的相同字段长度要一致,mysql取值如果满足可用占用空间小的,如tinyint、smallint等等


tomcat:
catalina.sh  在cygwin=false前面添加
JAVA_OPTS="-server -Xms512M -Xmx512M -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:PermSize=64M -XX:MaxPermSize=128m"


server.xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="350" />

<Connector port="8080"
        protocol="org.apache.coyote.http11.Http11NioProtocol" // NIO
        executor="tomcatThreadPool" // Executor 线程池
        compression="on"
        compressionMinSize="2048"
        maxThreads="30000" //设定处理客户请求的线程的最大数目,决定了服务器可以同时响应客户请求的数,默认200
        minSpareThreads="512" //初始化线程数,最小空闲线程数,默认为10
        maxSpareThreads="2048"
        enableLookups="false" //关闭DNS反向查询,性能高设false
        redirectPort="8443"
        acceptCount="35000" //当所有可以使用的处理请求的线程数都被使用时,可以被放到处理队列中请求数,请求数超过这个数的请求将不予处理,默认100
        debug="0"
        connectionTimeout="40000"
        disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />


引用



linux:
查询ulimit命令
# 显示当前所有的 limit 信息
Linux: ulimit -a
# Linux操作系统对一个进程可以打开最大文件描述符的数量
Linux: ulimit -n
# 用户最大可用的进程数
Linux: ulimit -u

1. 句柄数:ulimit -n
问题: Can’t open so many files
临时解决方案:
ulimit -SHn 65535

最终解决方案,在/etc/security/limits.conf文件中设置最大打开文件数 添加:
Linux: vi /etc/security/limits.conf

# *代表针对所有用户
*      soft    nofile        65535       
*      hard    nofile        65535

最后用重启ulimit -a再次查看,open files的值,如果改过来,则生效。


2. 用户进程数:ulimit -u
比如我们在模拟大规模http并发测试的时候,客户端会报一个无法fork new proc异常,原因是受到了最大进程1024的限制,解除 Linux 系统的最大进程数
解决方案:修改/etc/security/limits.d/90-nproc.conf
Linux: vim /etc/security/limits.d/90-nproc.conf

# 添加如下的行
*          soft    nproc     102400
root       soft    nproc     102400


3. 网络参数
修改/etc/sysctl.cnf文件,增加如下内容
Linux: vim /etc/sysctl.cnf


net.core.netdev_max_backlog = 32768 
net.core.somaxconn = 32768 
net.core.wmem_default = 8388608 
net.core.rmem_default = 8388608 
net.core.rmem_max = 16777216 
net.core.wmem_max = 16777216 
net.ipv4.ip_local_port_range = 1024 65000 
net.ipv4.route.gc_timeout = 100 
net.ipv4.tcp_fin_timeout = 30 
net.ipv4.tcp_keepalive_time = 1200 
net.ipv4.tcp_timestamps = 0 
net.ipv4.tcp_synack_retries = 2 
net.ipv4.tcp_syn_retries = 2 
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_mem = 94500000 915000000 927000000 
net.ipv4.tcp_max_orphans = 3276800 
net.ipv4.tcp_max_syn_backlog = 65536

保存退出,执行sysctl命令,重新加载内核参数立刻生效
Linux: sysctl -p


引用



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [linux mysql tomcat] 推荐:

Linux、mysql、tomcat大并发下的配置

- - Linux - 操作系统 - ITeye博客
    因为之前一直没太接触过项目实现部署的问题,所以中间出现了N多问题,现在有时间了,做了一个整理,已备后用. 此处不包括上一层服务器的负载,如使用nginx/apache等. 配置项目中的连接池最大连接数 <= mysql的max_connections(如项目有集群,则乘N). 可解决出现:MySQL 提示 Too many connections ( 1040 ).

linux、mysql、nginx、tomcat 环境下压力测试的主要调试参数

- - SegmentFault 最新的文章
一、linux 系统内核参数. /etc/sysctl.conf文件常用参数. net.core.netdev_max_backlog = 32768 #允许送到队列的数据包的最大数目 net.core.rmem_max = 8388608. #SOCKET读缓存区大小 net.core.wmem_max = 8388608.

Linux Ksplice,MySQL and Oracle

- Syn - DBA Notes
Oracle 在 7 月份收购了 Ksplice. 使用了 Ksplice 的 Linux 系统,为 Kernel 打补丁无需重启动,做系统维护的朋友应该明白这是一个杀手级特性. 现在该产品已经合并到 Oracle Linux 中. 目前已经有超过 700 家客户,超过 10 万套系统使用了 Ksplice (不知道国内是否已经有用户了.

Linux 安装 MySQL / MySQL 主从备份

- - BlogJava-首页技术区
假定所有安装包均在 /share目录,安装目录为 /opt !!. ========================= 安装 MySQL =========================. $ vi /opt/mysql/my.cnf (参考下面配置). $ vi /etc/rc.d/init.d/mysql (参考下面配置).

linux 下mysql自启动

- - 数据库 - ITeye博客
如果你都是按照默认配置安装的那么只要按照如下步骤就可以了. 1、cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql   将服务文件拷贝到init.d下,并重命名为mysql. 2、chmod +x /etc/init.d/mysql    赋予可执行权限.

Linux中对MySQL优化

- - 数据库 - ITeye博客
要求: MySQL数据库管理与维护. 1、熟悉Linux上安装、配置和优化MySQL数据库,. 2、熟悉 Mysql的AB复制以及读写分离的实现,能完成添加从库,从库变主库等操作;. 3、精通mysql数据库的查询、子查询、插入、更新等操作,以及建数据库、表和索引;. 4、掌握表的连接、视图,以为存储过程和函数的使用;.

Linux下Apache+Tomcat搭建负载均衡服务器集群

- - 极客521 | 极客521
这篇文章主要讲解关于如何在Linux下搭建Apache+tomcat 负载均衡服务器集群的过程. 负载均衡集群配置(1):Tomcat的配置. 修改“ tomcat/conf/server.xml ”文件. 编辑server.xml文件,找到“ ”元素节点,在server.xml文件里面未注释掉的有两个 元素节点.

关于JVM(JDK),Tomcat,Linux的最大线程数问题

- - 孟飞阳的博客
一、JVM(JDK)最大线程数. JVM最大创建线程数量由JVM堆内存大小、线程的Stack内存大小、系统最大可创建线程数(Java线程的实现是基于底层系统的线程机制来实现的,Windows下_beginthreadex,Linux下pthread_create)三个方面影响. -Xmx  最大堆内存.

Mysql Tomcat C3p0 系统性能调优个人总结

- - CSDN博客数据库推荐文章
应用逻辑 就是用c3p0 到数据库查询数据并http返回Json数据. 1 调优前的最初的测试结果   JMeter test result. 这个数据是从程序的log 中打印出的 数据库select语句 中得出的结果(正确与否后面会有讨论). 2 经过IOD系统打印 SQL query 的执行时间 和 tomcat 每个request 的 响应时间,找出 系统瓶颈 是因为一个 select语句 使用了 in:.

linux 定期自动备份mysql的shell

- - OurMySQL
刚才有个玩家在站上玩游戏,提醒了我要及时备份数据啊,万一哪天服务器挂了把他们的数据丢了,我可就是罪人了. 一直打算放个自动备份的shell,都没有放. 安全起见,直接用Root执行的:. 以下是自动自动备份shell,只保留最新5天. AutoMySQLBackup — 轻量级MySQL备份方案. LINUX/win2003下mysql怎么定期自动备份数据库.