superfang 发表于 2011-6-14 11:07:49

memcache set 失败过多

大家好:
   有人用过memcache 频繁的作写操作吗?
业务是这样的:
   我们一个业务要求:
    客户可以自己手动刷新自己的房源信息, 这个刷新就是更新时间,
   但是我们的客户群有2万人左右,   
   每一次刷新房源的话,可以刷新5个房源. 也就是2万*5 这么一个并发量.
   刷新的时间间隔是 3分钟:

现在出现的问题:
    刷新的数量不正确如: 一个客户刷新问题是100次,如果刷新一次,每一次刷新房源数量是5的话,他就只剩下95次了, 但是客户这个刷新次数是还是100,也就是memcache Set 失败了. 这个现象不是全部用户都这样的,只是一部分用户出现这种情况. 我们通过日志发现有部分set 失败了. 做减法操作失败了. 找了许多的资料但是都没有找到可以解决问题的办法,. 希望网络有高人指点.

superfang 发表于 2011-6-14 13:14:54

针对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 会有这么多的问题...唉!! 

TestFuture 发表于 2011-6-14 17:00:24

都是链接的问题,第一个链接失败,第二个链接超时。
因为你说的,出现的问题很少,也就说,服务程序和memcached的连接是正常的,可能是在大并发量的情况下,才会出现。不知道你用的memcached是什么版本,如果是memcached 1.4.5
你试试,启动memcached时,增加参数-t (number of threads to use),设置大点

msnshow 发表于 2011-6-14 21:39:15

连接数过多,超时了,没办法

superfang 发表于 2011-6-17 11:20:37

有可能是网络的原因? 通过stats 查看 , 链接数在 3000左右的, 没有达到10000 ;机器配置是: 16cpus / 16g mem /
    现在只能怀疑是网络的原因造成的.

superfang 发表于 2011-6-17 11:23:14

本帖最后由 superfang 于 2011-6-17 11:28 编辑

回复 3# TestFuture


    这个参数效果不太好的:我以前做过对比: 400并发情况下, -t1比 -t 4 性能还要好的. 不知道为什么? 所有的硬件资源都在合理的使用范围内的.听官方文档说,如果设置的线程数量超过cpu的数量后,有可能会造成 资源争用的情况, 反而性能会有所下降的.

superfang 发表于 2011-6-17 11:34:29

回复 4# msnshow


    问题出现了: 都有解决的办法,只是现在没有找到.
   解决办法:
1) 业务分离,将访问最多的业务单独开启一个端口, 通过压力测试, 查看stats 情况 ,将链接数失败的原因找到. 是一个业务这种现象还是多个业务都是这种情况
2) 跟踪网络: 查看网络有没有链接不上或是ping 不通的情况.
但是都是自己的想法, 开发有的时候几乎都不配合做. 做一点实事, 感觉真难啊....
页: [1]
查看完整版本: memcache set 失败过多