摘要:对于的扩展开发是心有余而力不足,所以只能放弃心爱的,自己来造个简单的日志轮子了。以上是故事背景,下面开始讲造轮子的收获。以上四步看似走了一圈冤枉路,但是学习到的经验还是很值得分享的。
最近准备升级PHP7,发现同时使用yaf和seaslog扩展时会导致流量上升时php-fpm子进程的crash,在php-fpm.log中可以看到以下warning记录,最终引起请求中断。
WARNING: [pool www] child 15148 exited on signal 6 (SIGABRT) after 337.885989 seconds from start
经过动手实验,发现只要加载了seaslog.so,即使不调用它的方法,仍然存在上述问题,推测是seaslog扩展的RINIT和RSHUTDOWN里面的处理有问题,但是检查不出来是什么问题。对于PHP的扩展开发是心有余而力不足,所以只能放弃心爱的seaslog,自己来造个简单的日志轮子了。
以上是故事背景,下面开始讲造轮子的收获。
第一步,简单地实现功能,对文件进行写操作。
$fp = fopen($file, "a"); fwrite($fp, $log); fclose($fp);
第二步,考虑文件锁,高并发场景下有可能会把日志写乱。
$fp = fopen($file, "a"); if (flock($fp, LOCK_EX)) { fwrite($fp, $log); flock($fp, LOCK_UN); } fclose($fp);
第三步,考虑到写日志只是一个很简单的应用场景,不需要考虑读文件时的数据一致性,为了提高效率我们可以改良一下这个文件锁。假设程序所在的文件系统的块的空间大小是4096字节,小于这个这个长度的日志可以直接写文件,否则要先抢占文件锁再写文件。
$fp = fopen($file, "a"); if (strlen($log) <= 4096) { fwrite($fp, $log); } else if (flock($fp, LOCK_EX)) { fwrite($fp, $log); flock($fp, LOCK_UN); } fclose($fp);
If handle was fopen()ed in append mode, fwrite()s are atomic (unless the size of string exceeds the filesystem"s block size, on some platforms, and as long as the file is on a local filesystem). That is, there is no need to flock() a resource before calling fwrite(); all of the data will be written without interruption.
第四步,如果我们的日志长度几乎全是小于4096字节,可以退回到第一步的代码,而且还有一个选择,和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
file_put_contents($file, $log, FILE_APPEND);
以上四步看似走了一圈冤枉路,但是学习到的经验还是很值得分享的。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/21460.html
摘要:这是年前的最后一篇文章,本章来聊一聊程序员如何优雅的搬砖搬砖既为达到目的,不断重复某项工作的行为,其实与造轮子一样,不谋而合基础这里的基础并非单指其技术能力,技术底蕴,更有意体现程序员在初期不断重复的工作而获得的感想与意识。 showImg(https://segmentfault.com/img/bVbnSFx?w=800&h=444); 我一生的文章都会放在这里,我的博客,我希望每...
摘要:根据当时的情境,是在微信开发者工具中删掉该小程序然后重新载入就解决了,大家给出的结论是微信小程序开发者工具的。 Created 2019-4-2 22:17:34 by huqiUpdated 2019-4-2 23:17:34 by huqishowImg(https://segmentfault.com/img/bVbqOLH?w=1526&h=818); ↑开局一张图,故事全靠编...
前言 RxHttp截止本文发表已经推广了4个礼拜,目前已经有了141个star,如下: showImg(https://user-gold-cdn.xitu.io/2019/5/20/16ad5f3b6d10d9be); 其中一文,Android 史上最优雅的实现文件上传、下载及进度的监听更是得到了大神刘皇叔微信公众号的推送,欢迎读者关注刘皇叔微信公众号「刘望舒」,每天都有精彩的文章推送,真的很棒...
阅读 2805·2021-09-10 10:50
阅读 2173·2019-08-29 16:06
阅读 3154·2019-08-29 11:02
阅读 1076·2019-08-26 14:04
阅读 2784·2019-08-26 13:24
阅读 2256·2019-08-26 12:16
阅读 521·2019-08-26 10:29
阅读 3028·2019-08-23 18:33