gpt4 book ai didi

apache - Redis PhpRedis 堆栈跟踪

转载 作者:可可西里 更新时间:2023-11-01 11:45:31 24 4
gpt4 key购买 nike

出于性能和稳定性的原因,我一直在测试 phpredis。性能非常好,但是在持续测试后我看到了可重复的堆栈跟踪错误 - 通过“ab”运行相同的脚本。

模式运行此测试 3 到 4 次

ab -n 10000 -c 10 -k "http://localhost:84/index.php rw_app_id=1&code=test&device_id=test"

(如果我从浏览器运行请求,我似乎无法让错误出现,尽管那可能是因为我无法加载进程。)

通常在第 3 次或第 4 次迭代期间,Apache 错误日志报告以下内容:

Apache 错误日志:

[warn] [client 127.0.0.1] mod_fcgid: stderr: PHP Fatal error:/var/www/web1/web/index.php:108 中未捕获异常 'RedisException' 消息 'Redis server wone away' p>

[警告] [客户端 127.0.0.1] mod_fcgid:stderr:堆栈跟踪:[2012 年 4 月 18 日星期三 16:39:49] [警告] [客户端 127.0.0.1] mod_fcgid: stderr: #0/var/www/web1/web/index.php(108): Redis->hGet('rw_promo_code: 1...', '解锁码')

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #1/var/www/web1/web/index.php(172): RedeemAPI->redeem()

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #2 {main}

[warn] [client 127.0.0.1] mod_fcgid: stderr:/var/www/web1/web/index.php:0 中的下一个异常“RedisException”和消息“Redis server wone away”

[警告] [客户端 127.0.0.1] mod_fcgid:stderr:堆栈跟踪:

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #0/var/www/web1/web/index.php(172): Redis->__destruct()

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #1/var/www/web1/web/index.php(172): RedeemAPI->redeem()

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #2 {main}

[warn] [client 127.0.0.1] mod_fcgid: stderr: thrown in/var/www/web1/web/index.php on line 0

[warn] [client 127.0.0.1] mod_fcgid: stderr: PHP Fatal error:/var/www/web1/web/index.php:108 中未捕获异常 'RedisException' 消息 'Redis server wone away' p>

[警告] [客户端 127.0.0.1] mod_fcgid:stderr:堆栈跟踪:

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #0/var/www/web1/web/index.php(108): Redis->hGet('rw_promo_code:1...', 'unlock_code')

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #1/var/www/web1/web/index.php(172): RedeemAPI->redeem()

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #2 {main}

[warn] [client 127.0.0.1] mod_fcgid: stderr:/var/www/web1/web/index.php:0 中的下一个异常“RedisException”和消息“Redis server wone away”

[警告] [客户端 127.0.0.1] mod_fcgid:stderr:堆栈跟踪:

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #0/var/www/web1/web/index.php(172): Redis->__destruct()

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #1/var/www/web1/web/index.php(172): RedeemAPI->redeem()

[警告] [客户端 127.0.0.1] mod_fcgid: stderr: #2 {main}

[warn] [client 127.0.0.1] mod_fcgid: stderr: thrown in/var/www/web1/web/index.php on line 0

[warn] [client 127.0.0.1] mod_fcgid: stderr: PHP Fatal error:/var/www/web1/web/index.php:108 中未捕获异常 'RedisException' 消息 'Redis server wone away' p>

等....

重新启动 Apache 和 Redis 并可以重复该循环。偶尔它会再次连接并成功处理一些请求。

我可以 try catch 异常并尝试重新连接,但进程无法恢复。

Ubuntu x86_64 11.10Redis 版本 2.4 Apache /2.2.20 (Ubuntu)mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_fcgid/2.3.6 mod_perl/2.0.5 Perl/v5.12.4

最佳答案

https://github.com/antirez/redis/issues/340: 上找到这个:

这可能是操作系统没有足够快地清理连接造成的。当为 redis-benchmark 禁用 keepalive 时会发出以下警告,但同样适用于运行循环基准测试:

警告:keepalive 已禁用,您可能需要

echo 1 >/proc/sys/net/ipv4/tcp_tw_reuse 用于 Linux 和

对于 Mac OS X,sudo sysctl -w net.inet.tcp.msl=1000 以便使用大量客户端/请求

我测试了这个并且它有帮助 - 但是我仍然遇到错误

[warn] [client 127.0.0.1] (104) 对等方重置连接:mod_fcgid:从 FastCGI 服务器读取数据时出错[错误] [客户端 127.0.0.1] 脚本头过早结束:index.php

更新:

已测试 1,000,000 个请求 - 一次 10 个 - 零错误。

关于apache - Redis PhpRedis 堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10208924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com