日志操作是不是比较消耗 CPU?

最近在做一个停车的道闸的系统,道闸和中心服务器的通信方式是轮询的方式,大概一台闸机每隔100毫秒轮询一次中心服务器,然后共计3台闸机的样子,不知道为啥cpu经常出现吃满100%然后服务死掉的情况(大概每2个小时发生一次),轮询主要代码是查询数据库和更新心跳时间和查询是否有待发的指令(数据库在内网另外的服务器,并没有吃满),技术总监还是一如既往的吐槽php性能差,准备用java重新写了,我想的是php性能虽然差也不至于每秒30次的并发也撑不住吧,所以想找到原因,目前猜测可能的原因还是日志的问题(我的依据是服务卡住的时候我打开日志文件一直在阻塞状态),因为每查询一次数据库,好像日志都会记录,不知道每秒30次的文件操作是否会占用较大的cpu? 如果不是的话,又该从什么地方进行排查呢?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

:see_no_evil:php不背这个锅,我有一个项目也是对设备的,不过不是轮训的形式,是长链接,我基本每一个消息都做了写入文件的日志操作,用的也是原生的形式,没有发现有100%的情况.我认为你应该用strace 来查看你的进程在做些什么才导致100%

3年前 评论
poker_face (楼主) 3年前
讨论数量: 11
leo

不应该先通过各种手段找 cpu 100% 的原因吗?比如先确认是不是 PHP 吃满的 CPU,说不定是 MySQL/Redis 呢?另外就是通过 strace 或者 phpstrace 来看看 PHP 进程在做什么事情

3年前 评论
poker_face (楼主) 3年前

可以自己写一个日志录入的代码 然后看cpu的状态

3年前 评论

如果是日志的问题 你可以先把日志放到内存里,隔一段时间把内存中的数据录入文件中

3年前 评论
leo

不应该先通过各种手段找 cpu 100% 的原因吗?比如先确认是不是 PHP 吃满的 CPU,说不定是 MySQL/Redis 呢?另外就是通过 strace 或者 phpstrace 来看看 PHP 进程在做什么事情

3年前 评论
poker_face (楼主) 3年前

如果是每隔两个小时,那可能是定时脚本 如果是cpu100,先看看是不是php-fpm占了大量资源 如果服务器配置不够,30的并发的确扛不住

信息太少,建议从nginx日志和php日志开始查

3年前 评论
poker_face (楼主) 3年前

PHP 不背这个锅

3年前 评论
╰ゝSakura

其实可以自己压测下,另外打点下程序运行某一个功能点的时间间隔,看看哪个环节出问题,是连数据库还是说查询操作,写日记这块耗时的问题

3年前 评论

没研究过,这应该不是拖慢响应的主要因素,记录日志是必要的。系统日志长时间不清理能达到几十GB,项目日志也需要定时清理。

3年前 评论

file
查看php-fpm的配置,是不是配低了

如果是Laravel, 并发方面我不怎么看好,即使是只返回一个hello world
(fpm框架轻一点好些 毕竟每次都要初始化)。

还是Lumen香, opcache请一定要开。

(你关闭下日志 不就知道是不是日志问题了…)

3年前 评论
poker_face (楼主) 3年前

之前也遇到这样的问题,最后一查,还是代码的问题,之前有个包,in_array的数组有几十万到几百万………

3年前 评论

:see_no_evil:php不背这个锅,我有一个项目也是对设备的,不过不是轮训的形式,是长链接,我基本每一个消息都做了写入文件的日志操作,用的也是原生的形式,没有发现有100%的情况.我认为你应该用strace 来查看你的进程在做些什么才导致100%

3年前 评论
poker_face (楼主) 3年前
黑将军

PHP不背这个锅,我们也是道闸,十几台,资源都很省,你肯定有其他地方占用了资源,不过我们轮询次数没那么高,我们20秒轮询一次

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!