性能

Nginx Unit 初探及其性能对比分析

1. Nginx Unit 初探

Nginx Unit 是一个开源的,以 Nginx 为基础、支持多语言的 Web 服务器,它支持 Python,PHP,Go 等多语言应用程序,可以在不中断服务的情况下完成部署配置更改,以多种语言运行代码。而它运行多种语言的能力是基于内部路由器进程之间的隔离,路由器进程可终止传入的 HTTP 请求,以及应用程序进程的分组,路由器进程是持久的,不重新启动。

它具有以下特征:

使用 RESTful JSON API 进行动态重配置服务器;

同时支持多语言,多版本应用;

即将支持的特性有:

动态语言的进程管理功能;

TLS 支持;

TCP,HTTP,HTTPS,HTTP/2 路由和代理。…

                

PHP框架最新性能压力测试比较

关闭debug,无优化情况下测试。

PHP框架最新hello world压力测试 结果ab -n 10000 -c 100 -k $url:
laravel 6.5:700rps.
symfony4.4 :1300 rps.(web)
thinkphp6.0 : 2200 rps.
ubiquity 2.3 :3300rps.
phalcon 3.4.4 :6100rps.

 

PHP框架最新模板渲染hello world压力测试 结果ab -n 10000 -c 100 -k $url:
laravel 6.5:700rps.
symfony4.4 :1200 …

                

在PHP 7.4中使用预加载–Opcache Preloading

PHP 7.4增加了预加载(Opcache Preloading)的支持,这一功能可以显著提高PHP程序的运行性能。

它是如何工作的:

  • 为了预加载文件,您需要编写一个自定义PHP脚本
  • 此脚本在服务器启动时执行一次
  • 所有预加载的文件都在内存中可用于所有请求
  • 在重新启动服务器之前,对预加载的文件所做的更改不会生效

简单来说就是把PHP代码完全加载到内存中来达到提升性能的目的。

让我们深入研究一下。…

            

PHP Socket 深度探索

Socket(套接字)一直是网络层的底层核心内容,也是 TCP/IP 以及 UDP 底层协议的实现通道。随着互联网信息时代的爆炸式发展,当代服务器的性能问题面临越来越大的挑战,著名的 C10K 问题(http://www.kegel.com/c10k.html)也随之出现。幸亏通过大牛们的不懈努力,区别于传统的 select/poll 的 epoll/kqueue 方式出现了,目前 linux2.6 以上的内核都普遍支持,这是 Socket 领域一项巨大的进步,不仅解决了 C10K 问题,也渐渐成为了当代互联网的底层核心技术。libevent 库就是其中一个比较出彩的项目(现在非常多的开源项目都有用到,包括 Memcached),感兴趣的朋友可以研究一下。

由于网络上系统介绍这个部分的文章并不多,而涉及 PHP 的就更少了,所以石头君在这里希望通过《Socket深度探究4PHP》这个系列给对这个领域感兴趣的读者们一定的帮助,也希望大家能和我一起对这个问题进行更深入的探讨。首先,解释一下目前 Socket 领域比较易于混淆的概念有:阻塞/非阻塞、同步/异步、多路复用等。

1、阻塞/非阻塞:这两个概念是针对 IO 过程中进程的状态来说的,阻塞 IO 是指调用结果返回之前,当前线程会被挂起;相反,非阻塞指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。…

        

Linux应用程序性能

本系列文章

  1. 第一部分。迭代服务器
  2. 第二部分。分叉服务器
  3. 第三部分。预分叉服务器
  4. 第四部分。线程服务器
  5. 第五部分预先线程服务器
  6. 第六部分:基于轮询的服务器
  7. 第七部分:基于epoll的服务器

Web应用程序是消费者和企业的主要内容。在用于移动和理解位的许多现有协议中,HTTP具有压倒性的思想份额。当您遇到并了解Web应用程序开发的细微差别时,大多数人可能很少关注最终运行应用程序的操作系统。Dev和Ops的分离只会让情况变得更糟。但随着DevOps文化变得普遍,开发人员负责在云中运行他们的应用程序,更好地理解后端操作系统的细节是一个明显的优势。如果您将后端部署为供个人使用或供少数并发用户使用的系统,您实际上不必费心使用Linux以及后端如何扩展。…

        

当我们在谈论高并发的时候究竟在谈什么?

什么是高并发?

高并发是互联网分布式系统架构的性能指标之一,它通常是指单位时间内系统能够同时处理的请求数,
简单点说,就是QPS(Queries per second)。

那么我们在谈论高并发的时候,究竟在谈些什么东西呢?

                        

每个程序员都应该知道的延迟数

L1 缓存 引用        ......................... 0.5 ns
分支预测错误        ............................ 5 ns
L2 缓存引用         ........................... 7 ns
互斥锁定/解锁       ........................... 25 ns
主内存引用              ...................... 100 ns
一次 CPU 上下文切换(系统调用)需要大约 ..........1500 ns
用 Zippy压缩1K字节   ............. 3,000 ns  =   3 µs
发送 2K 字节通过1Gbps内网  ....... 

深入理解前端性能监控

页面的性能问题是前端开发中一个重要环节,但一直以来我们没有比较好的手段,来检测页面的性能。直到W3C性能小组引入的新的API window.performance,目前IE9以上的浏览器都支持。它是一个浏览器中用于记录页面加载和解析过程中关键时间点的对象。放置在global环境下,通过JavaScript可以访问到它。

使用性能API

你可以通过以下方法来探测和兼容performance:

var performance = window.performance || 
    window.msPerformance || 
    window.webkitPerformance;
if (performance) {
    // 你的代码
}
复制代码

先来了解一下performance的结构

performance.memory是显示此刻内存占用情况,它是一个动态值,其中: usedJSHeapSize表示:JS 对象(包括V8引擎内部对象)占用的内存数 totalJSHeapSize表示:可使用的内存 jsHeapSizeLimit表示:内存大小限制 通常,usedJSHeapSize不能大于totalJSHeapSize,如果大于,有可能出现了内存泄漏。

performance.navigation显示页面的来源信息,其中: