性能

PHP 进阶之路 – 亿级 pv 网站架构实战之性能压榨

本博客并非全部原创,其实是一个知识的归纳和汇总,里面我引用了很多网上、书上的内容。也给出了相关的链接。

本文涉及的知识点比较多,大家可以根据关键字去搜索相关的内容和购买相应的书籍进行系统的学习。不对的地方大家予以批评指正。

有人给我留言说,亿级 PV 就别写文章了,随便用几个开源软件就能搞定了,只要不犯什么大错。我不以为然,如果你利用了相同的思想,使用了更高性能的基础服务,也许就能支持更多的流量并发,节约更多的服务器,优化的思路才是重点。

本内容的视频分享见我的直播

                

网卡中断设置

密集网络IO的服务器,需要设置网卡中断来解决性能瓶颈。通过使用top观察每个核的si是否很高。如果处理网络中断的CPU达到瓶颈,将会影响网卡收发包,严重的情况下会出现大量丢包。通过下面的脚本,可以将软中断平均到CPU的每个核上,解决网卡中断瓶颈问题。

ffffff 这里是根据CPU核数进行计算的

#!/bin/bash
# Enable RPS (Receive Packet Steering)

rfc=4096
cc=$(grep -c processor /proc/cpuinfo)
rsfe=$(echo $cc*$rfc | bc)
sysctl -w net.core.rps_sock_flow_entries=$rsfe
for fileRps in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)
do
    echo ffffff > $fileRps
done

for fileRfc in 
    

php session阻塞页面分析及优化 (session_write_close session_commit使用)

这个问题很多做PHP开发朋友应该都有遇到过,一个启用了session_start 页面,由于执行时间过长。导致用户访问另外一个很简单的启用session_start页面一直阻塞着。 直到第一个页面执行完了。第二个页面才可以读取。这个就是,我们常说的,session阻塞机制。

也就是说session是有锁的,为防止并发的写会话数据,php自带的的文件保存会话数据是加了一个互斥锁(在session_start()的时候)。
程序执行session_start(),此时当前程序就开始持有锁。
程序结束,此时程序自动释放Session的锁。

如果同一个客户端同时并发发送多个请求(如ajax在页面同时发送多个请求),且脚本执行时间较长,就会导致session文件阻塞,影响性能。因为对于每个请求,PHP执行session_start(),就会取得文件独占锁,只有在该请求处理结束后,才会释放独占锁。这样,同时多个请求就会引起阻塞。…