物理机器性能:
机器的物理 CPU 是 E5,专门指定分了 2 个核给这台虚拟机
专门分配一个物理网口给虚拟机独享
内存:4G 独享
系统 CentOS 6.8
MySQL 版本是 5.1.73
磁盘 I/O 是 120mb/s 读写的水平吧
虚拟机只是拿来跑 MySQL 的,
大概 40 多张表,最大的表有 4 千万,都建有“合理的”索引
内网只有几台 PC 机使用它的服务,以前并发量平时都是 100 左右( MySQL 默认是 151,所以一点儿事都没有),
最近更新了本地程序,现在 1 秒同时并发最大量到了 2000,有提示:Too many Connection 的字样,
于是根据网上的知识点,和我这里的实际情况改了一下 CentOS 的内核参数和 MySQL 配置,
# sysctl 配置
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
fs.file-max=65535
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 800
net.ipv4.tcp_max_syn_backlog = 819200
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 3
net.core.netdev_max_backlog = 500000
net.core.somaxconn = 65536
# my.ini 配置
max_tmp_tables = 64
max_allowed_packet = 32M
max_connect_errors = 8000
table_cache = 614
wait_timeout = 10
interactive_timeout = 10
max_connections=4096
back_log=600
wait_timeout=13
key_buffer_size = 128M
query_cache_size = 32M
read_buffer_size =16M
read_rnd_buffer_size = 16M
sort_buffer_size = 16M
read_rnd_buffer_size = 16M
thread_cache_size = 16
thread_concurrency = 8
open-files-limit = 10240
全部表的引擎都是 Myisam,程序操作没有事务的操作,对数据库的操作就是 INSERT/SELECT/UPDATE,
语句连 mysql 的函数运算都没有用到
程序上的所有连接都是单独的短连接,程序里没有长连接
优化的的期望是,除了增大接受的并发量,对于大量同时的 INSERT (同时 600 个短链接的过来),MySQL 是否可以先缓冲,然后慢慢写到表里?
老机器,I/O 确实不怎么样
不知道适合吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.