在 Linux 下通过 strace 与 lsof 命令排查 PHP 异常进程

在有些时候,会遇到PHP进程异常卡死的情况。面对这种情况,首先考虑到的就是分析代码进行优化改进,或者重启进程。但是,这种方式来排查不一定能找到根本原因。因为有些时候异常PHP进程卡死的原因可能是非常奇葩的问题,比如外部资源异常如DB、Redis与第三方API等。上一次关于超级话题签到提醒定时任务PHP进程异常的处理,问题竟然出现在外部的DB的链接上。由于网络原因导致读取DB没有响应卡死。这一次情况比较严重,超级话题积分系统的计算有一部分是通过Trigger(类似队列)接受全站数据进行积分计算与入库。由于用户反馈问题,来到队列机查看进程情况。如下$ ps -ef | grep Trigger | grep Commenwww 10693 1 7 16:06 ? 00:04:09 /usr/local/bin/php /path/cli.php request_uri=/Cli/Trigg... Read More

作为 10 个月的 Vim 使用者心得总结

隐约记得对于 Vim 的使用,起始于 2015 年 12 月份底。当时,是处于 Eclipse 到 Vim 的过渡时期。所以,对于 Vim 的使用基本上是“婴幼儿”级别。偶然间,我看到了一位同事正在编码的屏幕。不需要触摸板或鼠标的操作,看起来是那么的自然,更是让我看得有些“眼花缭乱”。从那时起,才知道原来 Vim 可以这么 cool。这十个月,经历了从小白到能够把 Vim 作为主 “IDE” 的过程。故在此和大家分享下本人在 Vim 的心得。从最基本的概念、快捷键到一些实用的插件的管理与使用。在此之前,曾在部门的例会上有做过分享(分享了一个多小时,估计大家都困了)。Vim 的指令集之丰富、功能之强大真,以至于我这种“小白”来在会议上分享 Vim 可谓多么忐忑,: 为什么要分享 Vim?这个问题很简单,但也重要。对于 Vim,会有两种态度1. 我用 Vim 我怕谁,我用键盘 debug ... Read More

自从有了她,再也不怕断签了:超级话题签到提醒

前言在解决了上一次关于超级话题积分bug后,又接到超级话题签到提醒的产品需求。这是一篇偏于技术实现的文章,讲述的比较笼统,业务围绕超级话题的签到提醒进行展开。如果,您对超级话题签到提醒的技术背景与实现感兴趣,那么这篇文章希望对你有帮助。当然,如果你是某个超级话题的超级粉丝,比如鹿晗,张艺兴,但是发现断签了。那么我非常替你感到“痛心”,因为目前超级话题没有补签功能。当然,如果你觉得是因为系统问题导致没有连续签到,那么你可以通过超级话题的官方反馈方式进行反馈来解决问题。当然,我劝你这么做之前一定要三思。因为,通过我排查的经验而言,基本山是由于你们(用户)把时间搞错了,而导致没有续签。而且,目前的签到提醒功能会在每天晚上提醒你签到的哦产品最近,在忙活超级话题的签到提醒产品的开发。首先,这是第一次比较热切的关注用户反应的产品。虽然说,对于产品的参与和认知并没有多么深入的理解,但是愈发的觉得这件事... Read More

PHP 的 Traits:到底是祸害还是好得飞起?

在 2012 年 3 月初,PHP 团队宣布了 5.4 版本的发布。程序员们对这次的发布已期待许久,因为这一次的升级带来了很多特性的加入。其中,最受追捧的是 Traits。为了构建这次发布的版本,Shammer C 特意为此撰写了一篇文档:如何使用 PHP 的 Traits,我强烈的建议您在读这篇文章之前拜读一下,因为这篇文章需要读者能够对 Traits 有一定的基础了解。Traits 已经被 PHP 社区广泛的接受,最为关键的是因为它包含了其他 Java、C++ 和 Python 编程语言的特性。除此之外,Traits 也被广大的网友们神化了。那些程序员狂砍这种特性将给他们的项目带来多么大的益处,尤其指出它是能够替代面向对象(OOP)继承的特性。然而,Traits 真的有那么神奇么?难道真的能对 PHP 开发有所促进么?还是败絮其中呢?PHP 的 Traits 是个祸害从表面上来看,由于... Read More

深入 MySQL 用户自定义变量:使用详解及其使用场景案例

一、前言在前段工作中,曾几次收到超级话题积分漏记的用户反馈。通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上。计数器的值会影响用户当前行为所获得积分的大小。比如,当用户在某超级话题下连续第 n(n 即计数器的值)次进行转发帖子时,将会获得与 n 相关的分数。然而,在第一次改进后问题依然存在。所以,这次在之前的基础上,通过使用 MySQL 变量的途径来解决该问题。二、到底 MySQL 的变量分哪几类?MySQL变量一共分为两大类:用户自定义变量和系统变量。如下用户自定义变量局部变量会话变量系统变量会话变量全局变量本文涉及的内容为用户自定义会话变量,若对其他分类无感,请点击这里。PS:用户定义的会话变量和系统定义的会话变量有什么区别?局部变量局部变量一般用于 SQL 的语句块中,比如存储过程中的 begin 和 end 语句块。其作用域仅限于该语句块内。生命周期也仅限于该存储过... Read More

基于 libgit2 C 语言库的 php-git 扩展 fix bug 辛酸史

前言这是一篇极其没有节(nei)操(rong)的文章。除非你真的无聊,请不要阅读,否则后果自负正文最近,在忙活微博话题组的日构建工具。工具主要的功能并不算复杂。写着写着,外面雨过天晴,居然还放起爆竹了,什么鬼。构建工具的主要功能正如介绍中所述的那样,提取产品、测试等基本信息、提取版本库(git)信息、检查(编译)源文件、自动部署项目与发送邮件等。在提取 git 库信息时,相对于之前利用 shell_exec PHP 原生函数提取 svn 信息的方式,打算利用扩展来提取信息。一来更规范、更有效率(微乎其微),二来专业。缺点是相对而言部署环境麻烦,因为需要安装 git 扩展到当前 php 运行环境中来。但是,万万没想到官方推荐的 php-git 扩展库开发版本已有3年没有维护了。索性用吧,又能怎样。安装还算顺利,由于公司开发机没有 cmake,yum 源也不可用,懒得配置,直接 downlo... Read More

关于微博话题组软件构建与发布工程的分享

针对于“发布工程(Release Engineer)”,也许大家并不陌生。如维基百科中介绍Release engineering, frequently abbreviated as RE or as the clipped compound Releng, is a sub-discipline in software engineering concerned with the compilation, assembly, and delivery of source code into finished products or other software components. Associated with the software release life cycle, it was said by Boris Debic of Google Inc.对于一个有着庞大开发团队... Read More

高并发、分布式数据库场景下需要注意的 UPDATE SQL 写法

业务模块超级话题签到积分具体场景更新签到积分行为表integration_record - 每次产生积分行为的记录表。即每当用户产生积分行为(如:在超级话题内进行签到、转发和回复等行为),就会增加一条 integration_record 表的记录。表明该用户在该超级话题下通过哪些行为产生了多少积分增量。integration - 每个用户的总积分表。即在每次写入一条 integration_record 记录后,会将积分增量累计加入到该表的总积分字段中。表明目前为止,该用户在该超级话题下通过积分行为一共获取的积分总数。表的细节就不给出了(也没必要)。这两张表都以话题 ID(topic_id)和用户 ID(uid_id)进行联合索引。具体问题在某些情况下,某个用户所在某个话题下的所有 integration_record 记录的积分总和小于该用户在该话题下的 integration 表记录... Read More

Powerline 插件安装之 Vim 篇(Mac)

Powerline 是 Vim 的状态栏插件,同时也提供状态栏和提示窗口功能给其他一些应用,包括 zsh,bash,Tmux,IPython,Awesome,i3 和 Qtile。这篇文字只谈 Vim 上的安装。环境与工具系统:OS X EI Capitan version 10.11.5终端:TerminalVim :v7.4.1914Xcode: 7.3.1(Xcode 的版本过低会影响一些依赖库的安装,我在 6.5 的情况下安装一些软件会出些问题,避免麻烦升级下)Python:3.5.源码python: https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tar.xvim: https://github.com/vim/vim/archive/v7.4.1949.tar.g安装Pytho./configure --pre... Read More

Vim 使用技巧之只有用了才会懂“最好的 IDE 是 Vim”

半年前,我还在诸如 Eclipse、ZendStudio 等 IDE 里徘徊。然而,这半年对于 Vim 的使用,不得不说,Vim 的效率是更高的。代价是需要时间来自定义并熟悉自己的 Vim。这里,只写下迄今为止对于 Vim + Tmux 的使用感受,以及展示 Vim 的使用技巧(至于如何入门 Vim 请自行 Google)。为什么要用 Vim?随时随地,摆脱环境的束缚,你只需要一个终端(Terminal)。你不必在键盘和鼠标之前来回切换(我压根就觉得鼠标是不服务于“编码工作”的产品),所有的操作都在指尖下的按键。高程度的自定义,所以不要来拷贝他人的配置文件,很伤。其他 IDE 中的功能在 Vim 里基本能找到替代品,幸福指数飙升耳听十遍,不如亲眼一见winmanager, ftaglist, neardtree, bufexplorer和tmux等的应用ctrlp的应用Vim 使用技巧看... Read More