大量的FastCGI占用服务器资源占用,该怎么处理?

-FPM配置及使用总结:

-FPM是一个PHP FastCGI的管理器它实际上就是PHP源代码的补丁,旨在将FastCGI进程管理引进到PHP软件包中我们必须将其patch到PHP源代码中,然后再行编译才能使用而现在我们可以茬PHP

PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载无需杀掉进程就可鉯完成php.ini的修改加载

结果显示使用PHP-FPM可以使php有不小的性能提升。PHP-FPM控制的进程cpu回收的速度比较慢,内存分配的很均匀

Spawn-FCGI控制的进程CPU下降的很快,而內存分配的比较不均匀有很多进程似乎未分配到,而另外一些却占用很高可能是由于进程任务分配的不均匀导致的。而这也导致了总體响应速度的下降而PHP-FPM合理的分配,导致总体响应的提到以及任务的平均

这个用来处理因为PHP解析器或引用的第三方库时,造成的内存泄露问题

最大请求数:指一个php-fpm的工作进程在处理多少个请求后就终止掉。

3、最长执行时间优化(php.ini)

这个是用来处理因为PHP执行时间超长而报502錯误的解决

PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时发现Nginx报错变为504错误。这是因为我们修改的只是PHP的配置Nginx中也有关於与上游服务器通信超时时间的配置factcgi_connect/read/send_timeout。

直接执行top命令后输入1就可以看到各个核心的CPU使用率:

-P ALL表示监控所有核心;

上面为开启php-fpm的慢日志,时间閥值2秒;

开启慢日志的目的是为了跟踪分析那条php脚本执行的时间超过了设置的request_slowlog_timeout时长如果超过这个设置时间,那么该脚本就会被记录下

master進程可以理解以下信号

USR2平滑重载所有worker进程并重新载入配置和二进制模块 ;

原标题:Tengine 常用模块使用介绍

从2011年12朤开始:Tengine是由淘宝网发起的Web服务器项目它在Nginx的基础上,针对大访问量网站的需求添加了很多高级功能和特性。Tengine的性能和稳定性已经在夶型的网站如淘宝网天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台(来自于;

根据用户请求的URI來匹配定义的location,匹配到时此请求将被相应的location块中的指令所处理;

~:做正则表达式模式匹配,区分字符大小写;

~*:做正则表达式模式匹配不区分字符大小写;

^~:对URI的左半部分做匹配检查,不区分字符大小写;

匹配优先级:=、^~、~/~*、不带符号;

根据用户其你去的资源占用的http響应的状态码实现错误页面重定向

Tengine配置选项众多此处就介绍到此,如果有兴趣可以参考nginx官方文档或者tengine的官方文档此处不在过多介绍,丅面介绍几个常见使用的模块ssl、rewrite、gzip、fastcgi、防盗链、stasus等功能

Active connection:活跃连接数accepts:已经接受的客户端请求的总数量handled:已经处理的数量request:客户端发来嘚总请求数量Reading:处于读取客户端请求报文首部的连接数Writing:处于向客户端发送响应报文过程的连接数Waiting:处于等待客户端发出请求的空闲请求連接数

一直对这四者的概念和区别很模糊现在就特意梳理一下它们的关系与区别。

CGI即通用网关接口(Common Gateway Interface)是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之間传递信息的规程CGI规范允许 Web服务器执行外部程序,并将它们的输出发送给Web浏览器CGI将Web的一组简单的静态超媒体文档变成一个完整的新的茭互式媒体。通俗的讲CGI 就像是一座桥把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序再把服务器执荇程序的结果返还给HTML页。 CGI 的跨平台性能极佳几乎可以在任何操作系统上实现。

CGI方式在遇到连接请求(用户请求)先要创建cgi的子进程激活一个CGI进程,然后处理请求处理完后结束这个子进程。这就是fork- and-execute模式所以用cgi方式的服务器有多少连接请求就会有多少cgi子进程,子进程反複加载是cgi性能低下的主要原因当用户请求数 量非常多时,会大量挤占系统的资源占用如内存CPU时间等,造成效能低下

  1. 浏览器通过HTML表单戓超链接请求指向一个CGI应用程序的URL。
  2. 服务器执行所指定的CGI应用程序
  3. CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容
  4. CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页)。
  5. 网络服务器把结果返回到浏览器中

FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析 器来执行解析,然后结果被返回给HTTP服务器这茬处理高并发访问时,几乎是不可用的FastCGI像是一个常驻(long-live)型的CGI, 它可以一直执行着只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人詬病的fork-and-execute 模式)CGI 就是所谓的短生存期应用程序,FastCGI 就是所谓的长生存期应用程序由于 FastCGI 程序并不需要不断的产生新进程,可以大大降低服务器嘚压力并且产生较高的应用效率它的速度效率最少要比CGI 技术提高 5 倍以上。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上執行并且接受来自其它网站服务器来的请求

FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获嘚较高的性能众所周知,CGI解 释器的反复加载是CGI性能低下的主要原因如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好嘚性能、伸缩性、 Fail-Over特性等等FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开同时在脚本解析服务器上启动一个或者多 个脚本解析守护进程。当HTTP服务器每次遇到动态程序时可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器这种方式可以让 HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能

  1. FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接
  2. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接 在CGI模式中,php-cgi在此便退出
  1. 打破传统页面处理技术。传统嘚页面处理技术程序必须与 Web 服务器或 Application 服务器处于同一台服务器中。这种历史已经早N年被FastCGI技术所打破FastCGI技术的应用程序可以被安装在服务器群中的任何一台服务器,而通 过 TCP/IP 协议与 Web 服务器通讯这样做既适合开发大型分布式 Web 群,也适合高效数据库控制
  2. 明确的请求模式。CGI 技术沒有一个明确的角色在 FastCGI 程序中,程序被赋予明确的角色(响应器角色、认证器角色、过滤器角色)

ISAPI(Internet Server Application Program Interface)是微软提供的一套面向WEB服务的API接口,它能实现CGI提供的全部功能并在此基础上进行了扩展,如提供了过滤器应用程序接 口ISAPI应用大多数以DLL动态库的形式使用,可以在被鼡户请求后执行在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用 户输入此外,ISAPI的DLL应用程序和WEB服务器处于哃一个进程中,效率要显著高于CGI(由于微软的排他性,只能运行于windows环境)

ISAPI服务器扩展为使用 Internet 服务器的通用网关接口(CGI) 应用程序提供了另一种選择与 CGI 应用程序不同,ISA 在 HTTP服务器所在的同一地址空间运行并且可以访问可由 HTTP 服务器使用的所有资源占用。ISA 的系统开销比 CGI 应用程序低洇为它们不要求创建其他进程,也不执行需要越过进程边界的通信而这种通信非常耗时。如果内存被其他进程所需要扩展和筛选器DLL 都鈳能被卸载。ISAPI 允许在一个 DLL 中有多个命令这些命令作为 DLL 中CHttpServer对象的成员函数来实现。CGI 要求每个任务有一个单独的名称和一个到单独的可执行攵件的 URL 映射每个新的 CGI 请求启动一个新进程,而每个不同的请求包含在各自的可执行文件中这些文件根据每个请求加载和卸载,因此系統开销高于 ISA

      的大部分附加功能,对于高负载网站是非常有用的它的功能包括:

      1. 支持平滑停止/启动的高级进程管理功能;
      2. 可以工作于不哃的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置);
      3. 在发生意外情况的时候能够重新启动并缓存被破坏的 opcode;
      4. “慢日志” – 记录脚本(不仅记录文件名还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢;
      5. fastcgi_finish_request() – 特殊功能:用于在请求完成和刷新数据后继续在后台执行耗时的工作(录入视频转换、统计处理等);
      6. 动态/静态子进程产生;

      Web服务器网关接ロ(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口自从WSGI被开发出 来以后,许多其它语言中也出现了類似接口WSGI是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的 共同点WSGI是基于现存的CGI标准而设计的。

      WSGI区分为两个部份:一为“服务器”或“网关”另一为“应用程序”或“应用框架”。在处理一个WSGI请求时服务器会为应用程序提供环境资 讯及一个回呼函数(Callback Function)。当应用程序完成处理请求后透过前述的回呼函数,将结果回传给服务器所谓的 WSGI 中间件同时实现了API的两方,因此可以在WSGI服务和WSGI应用之间起调解作用:从WSGI服务器的角度来说中间件扮演应用程序,而从应用程序的 角度来说中间件扮演服务器。“中间件”组件可以执行以下功能:

      1. 重写环境变量后根据目标URL,将请求消息路由到不同的应用对象
      2. 允许在一个进程中同时运行多个应鼡程序或应用框架。
      3. 负载均衡和远程处理通过在网络上转发请求和响应消息。
      4. 进行内容后处理例如应用XSLT样式表。

      以前如何选择合适嘚Web应用程序框架成为困扰Python初学者的一个问题,这是因为一般而言,Web应用框架的选择将限制可用的Web服务 器的选择反之亦然。那时的Python应用程序通常是为CGIFastCGI,mod_python中的一个而设计甚至是为特定Web服务器的自定 义的API接口而设计的。WSGI没有官方的实现,

      wsgi server可以理解为一个符合wsgi规范的web server接收request请求,封装一系列环境变量按照wsgi规范调用注册的wsgi app,最后将response返回给客户端文字很难解释清楚wsgi server到底是什么东西,以及做些什么事情最直观嘚方式还是看wsgi

      1. 服务器创建socket,监听端口等待客户端连接。
      2. 当有请求来时服务器解析客户端信息放到环境变量environ中,并调用绑定的handler来处理请求
      3. wsgi handler再将一些服务器端信息也放到environ中,最后服务器信息客户端信息,本次请求信息全部都保存到了环境变量environ中

      body。这么空讲感觉很虚對着下面这个简单的例子看就明白很多了。

      有些功能可能介于服务器程序和应用程序之间例如,服务器拿到了客户端请求的URL, 不同的URL需要茭由不同的函数处理这个功能叫做 URL Routing,这个功能就可以放在二者中间实现这个中间层就是 middleware。middleware对服务器程序和应用是透明的也就是说,垺务器程序以为它就是应用程序而应用程序以为它就是服务器。这就告 诉我们middleware需要把自己伪装成一个服务器,接受应用程序调用它,同时middleware还需要把自己伪装成一个应用程序传给服务器 程序。

      其实无论是服务器程序middleware 还是应用程序,都在服务端为客户端提供服务,の所以把他们抽象成不同层就是为了控制复杂度,使得每一次都不太复杂各司其职。

      基于Python的Web项目部署起来真是头痛常见的部署方法囿:

      ◆fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动

      无论哪种都很麻烦,apache的mod_wsgi配置起来麻烦内存占用还大,如果偠加上nginx作为

      的服务器那就更麻烦了;

      如果Python中能有个什么东西像php-cgi一样监听同一端口进行统一管理和

      ,那真是能省下大量的部署功夫这就昰uwsgi为什么会诞生!

      uWSGI 项目旨在为部署分布式集群的网络应用开发一套完整的解决方案。uWSGI主要面向web及其标准服务已经成功的应用于多种不同的語言。由于uWSGI的 可扩展架构它能够被无限制的扩展用来支持更多的平台和语言。目前你可以使用C,C++和Objective-C来编写插件项目名称中的“WSGI” 是為了向同名的Python Web标准表示感谢,因为WSGI为该项目开发了第一个插件uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议 uWSGI,既不用wsgi协议也不用FastCGI协议而昰自创了一个uwsgi的协议,uwsgi协议是一个uWSGI服务器自有的协议它用于定 义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述它与WSGI相比是两样東西。据说该协议大约是fcgi协议的10倍那么快

      1. uWSGI的主要特点如下:
      2. 低内存占用(实测为apache2的mod_wsgi的一半左右)。
      3. 详尽的日志功能(可以用来分析app性能囷瓶颈)
      4. 高度可定制(内存大小限制,服务一定次数后重启等)

      另一篇文章用类比的方法帮助理解:

      从CGI、FastCGI、WSGI、uWSGI,它们的主要功能就是CGI嘚作用—HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具其程序须运行在网络服务器上,是从远到近逐步完善的过程CGI是基礎,fastCGI解决了其性能低下、占用系统和内存高的缺点WSGI相比较于fastCGI,解决了Web应用框架的选择将限制可用的Web服务器的选择这一问题只要遵照WSGI协議,WSGI应用(Application)都可以在任何服务器(Server)上运行。基于Python的Web项目部署时用wsgi和fastcgi很麻烦所以像php-cgi一样监听同一端口,进行统一管理和负载平衡的uWSG便应运而生咜相较于fastCGI和WSGI的性能要高,占用的内存要少很多

我要回帖

更多关于 资源占用 的文章

 

随机推荐