存档

2013年8月 的存档

Redis2.4为何新增后台线程(转)

2013年8月19日 1 条评论

链接:https://github.com/redisbook/book/blob/master/redis-backgroud-thread.md

Redis 终于在 2.4 版本里引入了除主线程之外的后台线程,这个事情由来已久。早在 2010年2月 就有人提出aof的缺陷,提及的问题主要有:

主线程 aof 的每次 fsync(everysecond模式) 在高并发下时常出现 100ms 的延时,这源于 fsync 必不可少的磁盘操作,即便已经优化多次请求的离散小io转化成一次大的连续io(sina的同学也反映过这个问题)。
阅读全文…

分类: 系统架构 标签:

Redis thread model

2013年8月19日 没有评论

redis2.4之前版本都是单线程,只有一个主线程,存在很多性能问题,故在2.4版本中加入了后台线程,解决这些问题。(下篇文章会简单介绍单线程时的问题)
redis2.4启动后为单进程3线程模式。通过分析redis-2.4.16源码,得到了redis另外两个辅助线程的作用。
源码分析过程如下:
阅读全文…

分类: 系统架构 标签:

Get性能对比 [Redis] vs [Memcache]

2013年8月19日 没有评论

测试环境:同台server
测试工具:
redis-benchmark
memslap(libmemcached自带)
自制脚本,填充数据
软件版本:
redis-2.4.16
memcached-1.4.15
阅读全文…

分类: 系统架构 标签:

硅谷之行(二)计算机历史博物馆

2013年8月9日 1 条评论

计算机历史博物馆坐落在加州Mountain View,101公路北边,1401 N Shoreline Blvd。沿着路往西开,很近就是LinkedIn。
距离我们住的sunnyvale非常近。
我们对此博物馆早有耳闻,在国内就计划一定要参观学习下,这次机会一定不能放过。参观之后感觉真是不枉此行,使自己对计算机的发展有了整体的认识,以前只停留在书本上,这次亲眼所见后,印象更加深刻。(怎么像小学生的观后感啊,不过我的感受真的是这样)。通过这些展出的设备,感觉历史就这样活生生的在眼前。看到了牛郎星8800,看到了Jobs从施乐购买的系统和鼠标,(这些之前都是在报道和硅谷海盗的电影中见过)看到了最早的移动设备游戏设备。。。
阅读全文…

分类: 工作生活 标签:

mysql压测后记

2013年8月9日 没有评论

在压测过程中走了一点弯路,记录下。
1 最初压测只是单进程,对mysql的压力上不去,当时认为mysql可能能力就是这样了,后来估算了线上数据的情况,我测试的结果跟线上差的比较多。后想到用多线程跑下,结果比较理想。

2 多线程压测时innodb_thread_concurrency = 16 (这个参数被调到128失败)
在压测过程中,发现show engine innodb status 中大量在队里中等待的insert,手册上建议根据cpu核数硬盘数量调整,但是我想尝试多开线程的效果,果断调整为128,结果测试效果不是很好,只有正常值的70%左右,故又根据手册调整回原来数值。

3 perl的DBI 包应该是非线程安全的,创建连接后共享给线程,在线程里调用的话会报错。所以果断采用在线程内创建连接,每个线程使用自己创建的连接,这样就ok了,而且比单连接内多线程效果还给力。(另这个就要mysql的最大连接数配合了)

分类: Mysql数据库相关 标签:

mysql写性能测试记录二

2013年8月8日 没有评论

环境同上篇

1台施压服务器压测单mysqld实例
insert value 200 (每insert 插入200条数据)
4core8g  
200thread  13600 insert/s
iostat (以下指标为平均值)
wkB/s: 37104 wkB/s 平均37M左右
await: 62.94ms
%util: 91.85
dstat
csw:5000  上下文切换

2台施压服务器压测单服务器2 mysqld实例,3306/3307
insert value 200 (没insert 插入200条数据)
4core8g  
200thread  15000 insert/s
iostat (以下指标为平均值)
wkB/s: 40026 wkB/s 平均40M左右
await: 110ms
%util: 99.9
dstat
csw:5000  上下文切换

结论:
1、 insert value 200 可以充分挖掘mysql的写入能力,显著提高插入效率,所以开发同学拼sql时最好单insert多value方式拼写。
2、 单机多mysqld实例对于挖掘服务器写入有一定提升,通过测试大概能提升10%,但是和实例数增加不成线性关系,效果不显著。
3、 insert value 200 单mysqld实例时,磁盘IO已经接近瓶颈(%util: 91.85),所以单机多实例在大量写入的场景意义不大。
分类: Mysql数据库相关 标签:

mysql写性能测试记录一

2013年8月7日 没有评论

背景:最近在考虑扩容预案(散库or散表or散实例),各种预案都需要场景数据支持。check是否符合预期。
环境:
云服务器 CentOS release 6.3 (Final) x64
4core8g
4core16g
2core4g
写入表结构:
CREATE TABLE `stest` ( `a1` int(11) DEFAULT NULL, `a2` int(11) DEFAULT NULL, `a3` varchar(255) DEFAULT NULL, `a4` varchar(100) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
无主键无索引
mysql配置文件:测试过程中保持一致
关键参数
innodb_flush_log_at_trx_commit = 0
innodb_thread_concurrency = 16
innodb_io_capacity default
max_connections = 10000
innodb_file_per_table=1
innodb_flush_method default
阅读全文…

分类: Mysql数据库相关 标签:

Linux 内存布局 32位

2013年8月1日 没有评论

Linux 内存布局 32位
neicun2
阅读全文…

Linux 系统调用

2013年8月1日 没有评论

一 什么是系统调用
现代cpu可以在多种不同的特权级别下执行指令,现代操作系统中通常也据此有两种特权级别,分别为内核模式和用户模式,又称内核态和用户态。(具体请查看之前的文章 [Intel x86] 处理器保护模式下的特权级别
操作系统可以让不同的程序运行在不同的模式上,以限制他们的权力,提高稳定性和安全性。普通用户程序运行在用户态模式下,会受到很多限制,如访问IO,网络等。
运行在内核态的程序有权访问受保护的资源。
用户态程序如果需要访问受保护的资源,需要通过调用内核态程序的接口访问内核态程序,进而访问受保护资源,内核态提供的接口是完全受控的,所以稳定性和安全性可以得到保障。这个接口就是系统调用。
Linux 有300多个系统调用,细致的提供了访问受保护资源的各种接口。
阅读全文…