memcache set 失败过多
大家好:有人用过memcache 频繁的作写操作吗?
业务是这样的:
我们一个业务要求:
客户可以自己手动刷新自己的房源信息, 这个刷新就是更新时间,
但是我们的客户群有2万人左右,
每一次刷新房源的话,可以刷新5个房源. 也就是2万*5 这么一个并发量.
刷新的时间间隔是 3分钟:
现在出现的问题:
刷新的数量不正确如: 一个客户刷新问题是100次,如果刷新一次,每一次刷新房源数量是5的话,他就只剩下95次了, 但是客户这个刷新次数是还是100,也就是memcache Set 失败了. 这个现象不是全部用户都这样的,只是一部分用户出现这种情况. 我们通过日志发现有部分set 失败了. 做减法操作失败了. 找了许多的资料但是都没有找到可以解决问题的办法,. 希望网络有高人指点. 针对memcache 本身,只有简单的 set , get 操作.
测试发现:在200 - 400 并发情况下:set 失败数为0 , get 失败率也为0; 只发现了如下的错误信息
connect memcache fail: 10.11.162.246:11211
PHP Notice:session_start(): Server 10.11.162.246 (tcp 11211) failed with: Connection timed out (110) in /data/www/vip.51f.com/manager.php on line 8
两种类型的错误.但是这种错误很少.不知道为什么,用memcache 会有这么多的问题...唉!! 都是链接的问题,第一个链接失败,第二个链接超时。
因为你说的,出现的问题很少,也就说,服务程序和memcached的连接是正常的,可能是在大并发量的情况下,才会出现。不知道你用的memcached是什么版本,如果是memcached 1.4.5
你试试,启动memcached时,增加参数-t (number of threads to use),设置大点 连接数过多,超时了,没办法 有可能是网络的原因? 通过stats 查看 , 链接数在 3000左右的, 没有达到10000 ;机器配置是: 16cpus / 16g mem /
现在只能怀疑是网络的原因造成的. 本帖最后由 superfang 于 2011-6-17 11:28 编辑
回复 3# TestFuture
这个参数效果不太好的:我以前做过对比: 400并发情况下, -t1比 -t 4 性能还要好的. 不知道为什么? 所有的硬件资源都在合理的使用范围内的.听官方文档说,如果设置的线程数量超过cpu的数量后,有可能会造成 资源争用的情况, 反而性能会有所下降的. 回复 4# msnshow
问题出现了: 都有解决的办法,只是现在没有找到.
解决办法:
1) 业务分离,将访问最多的业务单独开启一个端口, 通过压力测试, 查看stats 情况 ,将链接数失败的原因找到. 是一个业务这种现象还是多个业务都是这种情况
2) 跟踪网络: 查看网络有没有链接不上或是ping 不通的情况.
但是都是自己的想法, 开发有的时候几乎都不配合做. 做一点实事, 感觉真难啊....
页:
[1]