最近刚刚全量上线PHP7,经过一晚发现个别机器的PHP-FPM占用CPU很高,整机top查看system time非常高。

通过strace查看PHP-FPM的系统调用发现存在频繁mmap/munmap 2MB内存的现象:

1

2

3

4

5

mmap(NULL,2097152,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0)=0x7f398a503000

munmap(0x7f398a503000,2097152)=0

mmap(NULL,4190208,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0)=0x7f398a304000

munmap(0x7f398a304000,1032192)=0

munmap(0x7f398a600000,1060864)=0

通过google找到了相关的怀疑对象:How to troubleshoot high load caused by php7,普遍聚焦在PHP7的一个huge page特性。

进一步google找到了鸟哥的博客,非常清楚的说明了Huge page的来由和作用:让你的PHP7更快之Hugepage 。

1

2

3

4

5

6

7

$cat/proc/meminfo|grepHuge

AnonHugePages:444416kB

HugePages_Total:0

HugePages_Free:0

HugePages_Rsvd:0

HugePages_Surp:0

Hugepagesize:2048kB

确认huge page的大小恰好就是2MB,与strace发现的调用相符,于是开始怀疑Huge page问题。后来被swoole韩天峰指正,上述mmap并没有携带HUGE_PAGE的flag,也就是说我抓的现场并不是分配huge page,之前的猜测是有问题的。

在PHP内核讨论群中提问,相关经验的同学提示我们可能是”透明大页”的问题,它是红帽系统的一个特殊机制,可以参考《新浪微博PHP7升级实践》中的介绍。它相当于把大页分配这个事情对应用透明化,会有一个独立的内核进程把我们普通分配的4KB页内存替换为huge page,可能造成性能问题。

因此结论是:

开启huge page是一个可选项,它是opcache的一个特性,一定程度优化PHP性能。

关闭”透明大页’是必选项,它是redhat的特性,可能造成性能骤降进入万劫不复。

关于Huge Page的扩展阅读

http://cenalulu.github.io/linux/huge-page-on-numa/

技术交流Q群:

374155314

聊聊技术+妹纸。

新浪微博php7升级实践,PHP7线上system time飙高问题相关推荐

  1. 面试官:线上服务CPU飙高怎么排查?

    用jstack排查 先执行top,找到CPU占用比较高的进程 jstack 进程id > show.txt 找到进程中CPU占用比较高的线程,线程id转为16进制 到show.txt文件中根据线 ...

  2. 新浪微博PHP7升级实践

    导读 伴随业务的增长,系统压力也在不断增加,再加上机房机架趋于饱和,无法更加有效应对各种突发事件.在这样的情况下,PC主站升级为PHP 7,有哪些技术细节可以分享? 背景 新浪微博在2016年Q2季度 ...

  3. eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析...

    Guide: eBCC性能分析最佳实践(0) - 开启性能分析新篇章 eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析 eBCC性能分析最佳实践(2) - ...

  4. 分布式缓存的25个优秀实践与线上案例 done

    杨彪,蚂蚁金服技术专家,<分布式服务架构:原理.设计与实战>和<可伸缩服务架构:框架与中间件>作者.近10年互联网和游戏行业工作经验. 本文节选自即将出版的<可伸缩服务架 ...

  5. Java 线上cpu占用过高分析

    转载于:https://blog.csdn.net/ch999999999999999999/article/details/113151519 感谢作者:ch999999999999999999 J ...

  6. 日请求亿级的QQ会员AMS平台PHP7升级实践

    QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿.然而,在之 ...

  7. 技术实践|线上故障分析及解决方法(上)

    线上故障通常是指大规模的影响线上服务可用性的问题或者事件,而对于线上故障的处理不仅是一项技术活,更是对技术人员/技术团队应急反应能力的考验.本文主要从线上故障的分类.应对思路.出现原因等方面入手,总结 ...

  8. 一次jvm导致线上内存占用过高问题定位

    背景:8G物理内存,8核CPU,jvm使用的G1垃圾回收器. 问题:线上内存占用告警,内存占用超过85%,且现象一直持续. 分析 看一下jvm启动参数配置: -Xms6144m -Xmx6144m - ...

  9. 记录一次线上CPU负载过高的排查过程

    背景 一大早收到运维同学反馈.线上某台机器cpu的负载达到了97%以上,为了不影响机器上服务的正常运行,急需找到导致负载过高的原因并将负载降到合理的区间. 用到命令 top/uptime:查看负载情况 ...

最新文章

  1. pythontcp服务器教程_tcp服务端无线为多个客户端服务|python基础教程|python入门|python教程...
  2. 4个mos管驱动的全桥电路原理_最经典MOS管电路工作原理及详解没有之一
  3. java 图形校验_java图形验证码生成工具类 web页面校验验证码
  4. 《剑指offer》删除链表中重复的节点
  5. 遇到指针别害怕!先把这篇笔记看一遍~
  6. 32bit win7 在VMWARE中安装64位的redhat LINUX4.7
  7. Vue-CLI搭建Vue项目
  8. db2 控制台执行创建函数语句_DB2 从命令行创建SQL存储过程
  9. Gstreamer官方教程汇总2---GStreamer concepts
  10. Google Cloud
  11. 一个好用的不基于时间的同步文件的软件 —— Allway sync 文件同步
  12. 程序员眼中的中国传统文化-王阳明《传习录》3
  13. 小米笔记本备份、SSD分区、U盘Ghost详解及对产品的建议
  14. bp神经网络综合评价例题,bp神经网络综合评价法
  15. python灰色关联度分析代码_GRA灰色关联度分析学习 附python代码
  16. 新手需要知道decode 和 encode 区别【转载】
  17. android:RecyclerView交互动画(上下拖动,左右滑动删除)
  18. OpenWrt——进行PPPoE拨号时透过路由器访问光猫的方法
  19. Mac报错:TSM AdjustCapsLockLEDForKeyTransitionHandling_ISSetPhysicalKeyboardCapsLockLED Inhibit
  20. 关于斐讯K2无管理员密码路由器重置问题

热门文章

  1. 剑指OFFER之包含min函数的栈(九度OJ1522)
  2. maven 编译后无配置文件解决办法
  3. DPM 2010(二)---BMR裸机恢复域控制器
  4. 去掉QQ2008的腾讯迷你首页和聊天时的广告
  5. shell脚本:判断本地和远程文件是否存在
  6. matlab已知xyz拟合标定map,matlab练习题
  7. python迭代_Python迭代
  8. easyui前端实现多选框_在实际案例中学习前端开发(第二期)
  9. mysql数据库和表的关系_MySQL数据库学习【第六篇】表与表之间的关系
  10. error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMainFrame::* )(void)' to ...