我们在高负载时遇到cpu短缺.只有在线用户大约1300-1400时才会发生这种情况(根据谷歌分析).我们在浏览器中收到空响应.

我觉得奇怪的是短缺发生了.我的意思是 – 有超过50%的空闲cpu,突然它在几秒内降到0%,然后跳回来.

这是当时的“iostat 1”输出.看最后一栏. 70%是最新的正常行为.
http://pastebin.com/sMjQ0AaJ

队列中的所有PHP-FPM进程都在死亡,将这些日志留在/ var / log / messages中

Feb 25 20:20:01 <kern.info> daSaran kernel: pid 36267 (PHP-fpm),uid 80: exited on signal 11
Feb 25 20:20:01 <kern.info> daSaran kernel: pid 36265 (PHP-fpm),uid 80: exited on signal 11
Feb 25 20:20:01 <kern.info> daSaran kernel: pid 36263 (PHP-fpm),uid 80: exited on signal 11
Feb 25 20:20:01 <kern.info> daSaran kernel: pid 36262 (PHP-fpm),uid 80: exited on signal 11

Nginx错误日志

2013/02/25 20:22:14 [error] 34877#0: accept() Failed (53: Software caused connection abort)
2013/02/25 20:22:14 [error] 34877#0: accept() Failed (53: Software caused connection abort)
2013/02/25 20:22:14 [error] 34877#0: accept() Failed (53: Software caused connection abort)
2013/02/25 20:22:14 [error] 34877#0: accept() Failed (53: Software caused connection abort)
2013/02/25 20:22:14 [error] 34874#0: accept() Failed (53: Software caused connection abort)

我不明白这种行为有两个原因.

>如果负载导致cpu短缺,那么cpu空闲时不应该线性下降,而不是突然?但另一个事实是,这种情况发生在负载上.
>为什么0%闲置持续几秒钟?

我们尝试优化脚本,服务器和数据库(单独的服务器).它只会使峰值用户略有增加.

服务器配置:

FreeBSD 8.3
Intel® Xeon® E3-1245 Quadcore
32 GB ECC RAM

什么会导致这样的问题?
我应该采取什么策略来找到瓶颈?

UPDATE
这是bt和dump_bt的gdb输出.

(gdb) dump_bt executor_globals.current_execute_data
[0x801827a58] getSaveHandler() /www/svn/zend-libs/Toktik/Session/Set.PHP:42
[0x8018278d0] Toktik_Session_Set::getSaveHandler() /www/svn/zend-libs/Toktik/Session/Set.PHP:59
[0x801827630] Toktik_Session_Set->add("6j6omknh8tbr28358gadtp40s7") /www/svn/zend-libs/Toktik/Session/SaveHandler/PHPredis.PHP:146
[0x7fffffffc350] Toktik_Session_SaveHandler_PHPredis->write("6j6omknh8tbr28358gadtp40s7","Zend_Auth|a:1:{s:7:"storage";s:7:"3963623";}")
(gdb) bt
#0 0x0000000000695cfe in zend_fetch_var_address_helper_SPEC_CONST_VAR (type=0,execute_data=0x801827a58)
at zend_vm_execute.h:4836
#1 0x00000000006961da in ZEND_FETCH_R_SPEC_CONST_VAR_HANDLER (execute_data=0x801827a58)
at zend_vm_execute.h:4863
#2 0x0000000000680a01 in execute (op_array=0x80dc8e2c8) at zend_vm_execute.h:410
#3 0x000000000063101d in zend_call_function (fci=0x7fffffffc640,fci_cache=0x7fffffffc320)
at /usr/ports/lang/PHP5/work/PHP-5.4.10/Zend/zend_execute_API.c:958
#4 0x000000000062fe8a in call_user_function_ex (function_table=0x80185e060,object_pp=0x0,function_name=0x80dc99b78,retval_ptr_ptr=0x7fffffffc6e8,param_count=2,params=0x80dadcab0,no_separation=1,symbol_table=0x0) at /usr/ports/lang/PHP5/work/PHP-5.4.10/Zend/zend_execute_API.c:750
#5 0x000000000062fcbd in call_user_function (function_table=0x80185e060,retval_ptr=0x80dae2670,params=0x7fffffffc7a0)
at /usr/ports/lang/PHP5/work/PHP-5.4.10/Zend/zend_execute_API.c:723
#6 0x0000000803cc924f in ps_call_handler () from /usr/local/lib/PHP/20100525-debug/session.so
#7 0x0000000803cc9924 in ps_write_user () from /usr/local/lib/PHP/20100525-debug/session.so
#8 0x0000000803cbf4a8 in PHP_session_save_current_state () from /usr/local/lib/PHP/20100525-debug/session.so
#9 0x0000000803cc3d06 in PHP_session_flush () from /usr/local/lib/PHP/20100525-debug/session.so
#10 0x0000000803cc5cd9 in zm_deactivate_session () from /usr/local/lib/PHP/20100525-debug/session.so
#11 0x000000000064f121 in zend_deactivate_modules () at /usr/ports/lang/PHP5/work/PHP-5.4.10/Zend/zend_API.c:2335
#12 0x00000000005b8aea in PHP_request_shutdown (dummy=0x0)
at /usr/ports/lang/PHP5/work/PHP-5.4.10/main/main.c:1759
#13 0x000000000079ec06 in main (argc=1,argv=0x7fffffffed58)
at /usr/ports/lang/PHP5/work/PHP-5.4.10/sapi/fpm/fpm/fpm_main.c:1948

这是使用PHPredis负责会话管理的类(dump_bt指向这些)
http://pastebin.com/kaRNXGCa

http://pastebin.com/njmmm2CD

对不起,不是一个正确的答案,但评论有点太长了.

堆栈的含义是执行引擎在会话关闭期间对用户回调进行了禁止.这是当您的会话处理程序Toktik_Session_SaveHandler_PHPredis :: write在第146行引发异常时.我不知道为什么添加失败,但在图像破坏期间抛出异常是一个坏主意.所以

>为什么添加失败?你有某种形式的更新过载导致队列溢出/超时.>考虑吞下这个并且失去这一个会话;

Segfault PHP-FPM,Nginx,Freebsd的更多相关文章

  1. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. iOS Swift上弃用后Twitter.sharedInstance().session()?. userName的替代方案

    解决方法如果您仍在寻找解决方案,请参阅以下内容:

  3. 使用Fabric SDK iOS访问Twitter用户时间线

    我试图在这个问题上挣扎两天.我正在使用FabricSDK和Rest工具包,试图为Twitter使用不同的RestAPIWeb服务.我可以使用具有authTokenSecret,authToken和其他值的会话对象的TWTRLogInButton成功登录.当我尝试获取用户时间线时,我总是得到失败的响应,作为:{“errors”:[{“code”:215,“message”:“BadAuthentic

  4. ios – 如何从Apple Watch调用iPhone上定义的方法

    有没有办法从Watchkit扩展中调用iPhone上的类中定义的方法?根据我的理解,目前在Watchkit和iPhone之间进行本地通信的方法之一是使用NSUserDefaults,但还有其他方法吗?

  5. ios – 如何将视频从AVAssetExportSession保存到相机胶卷?

    在此先感谢您的帮助.解决方法只需使用session.outputURL=…

  6. ios – 使用AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto拉伸捕获的照片

    解决方法所以我解决了我的问题.这是我现在使用的代码,它工作正常:…重要的输出imagaView:一些额外的信息:相机图层必须是全屏,并且outputimageView也必须是.我希望这些对某些人来说也是有用的信息.

  7. 我可以在iOS中自定义Twitter工具包的登录按钮吗?

    我已经下载了Twitter工具包框架并添加了用Twitter登录的代码.但是,我不希望登录按钮看起来像那样.我想要一个用于登录的自定义按钮.我能这样做吗?我只想使用这个框架,因为这也适用于iOS系统帐户.解决方法根据document:在按下按钮中添加代码:Objective-C的迅速

  8. ios – AVCaptureSession条形码扫描

    解决方法以下是我所拥有的项目代码示例,可以帮助您走上正确的轨道

  9. ios – 如何在Watch OS 2中引用不支持的框架

    有没有办法将框架链接到扩展名?

  10. ios7 – 在iOS 7中设置Alamofire中的自定义HTTP标头不工作

    解决方法我得到它的工作这对iOS7没有影响:然而,这将适用于iOS7和8:

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部