此文档只是测试时写的,没有在生产中使用,仅供学习使用,有什么问题,欢迎指出
PDF文档下载地址:http://www.linuxyw.com/download/tengine1.5.1.pdf
安装前设置
环境设置
echo "export LANG=zh_CN.UTF-8">>/etc/profile
echo "export PATH">>/etc/profile
echo "ulimit -SHn 65535">>/etc/profile #如果你服务器没有进行此项优化,在这就优化一下吧
source /etc/profile
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
内核参数优化
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65535
使参数生效
sysctl -p
MYSQL篇
Cmake安装
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
#CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。
“CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。
tar xvf cmake-2.8.5.tar.gz
cd cmake-2.8.5/
./bootstrap
make && make install
mysql 5.5.14安装
useradd -M mysql -s /sbin/nologin
tar xvf mysql-5.5.14.tar.gz
cd mysql-5.5.14/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/services/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8\
-DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk \
-DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/data/mysql/data -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=8004
make && make install
cp support-files/mysql.server /etc/init.d/mysql
chmod +w /usr/local/services/mysql/
chown -R mysql:mysql /usr/local/services/mysql/
chmod +w /usr/local/services/mysql/
chown -R mysql:mysql /usr/local/services/mysql/
修改my.cnf
chmod +x /etc/init.d/mysql
chkconfig --add mysql
chkconfig mysql on
/usr/local/services/mysql/scripts/mysql_install_db --basedir=/usr/local/services/mysql/ \
--datadir=/data/mysql/data \
--user=mysql
#/usr/local/services/mysql/bin/mysqld_safe --defaults-file=/usr/local/services/mysql/my.cnf &
#/usr/local/services/mysql/bin/mysqladmin -uroot -p password "111111" -P8004
PHP篇
libiconv库安装
libiconv库为需要做转换的应用提供了一个iconv()的函数,以实现一个字符编码到另一个字符编码的转换。
由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码。随着互联网时代的到来,通过互联网进行文字交流也逐渐增多:浏览外国的网站,这个时候字符编码的转换变得尤为重要。这带来了一个问题,就是许多字符在某一种编码方式中没有。为了解决这种混乱,Unicode的编码方式被建立。Unicode是一种超级编码包含了所有这些编码的字符集,因此一些新的文本格式像XML的默认编码方式就是Unicode.
但是很多老式的计算机还在使用当地的传统的字符编码方式。而一些程序,例如邮件程序和浏览器必须能在这些不同的用户编码之间作转换。其他的一些程序则内置支持Unicode,以顺利支持国际化的处理,但是仍然有在Unicode和其他的传统编码之间转换的需求。GNU的libiconv就是为这两种应用设计的编码转换库。
最新稳定版下载 http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar xvf soft.tar.gz
cd $soft_url/soft/
tar xvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/
./configure --prefix=/usr/local
make && make install
freetype库安装
freetype库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持单色位图、反走样位图的渲染。FreeType库是高度模块化的程序库,虽然它是使用ANSI C开发,但是采用面向对象的思想,因此,FreeType的用户可以灵活地对它进行裁剪。
下载地址:http://download.savannah.gnu.org/releases/freetype/
最新稳定版freetype-2.5.0.1.tar.gz
tar xvf freetype-2.3.5.tar.gz
cd freetype-2.3.5/
./configure && make && make install
jpeg库安装
PEG是Joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为".jpg"或".jpeg",是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。而且 JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。比如可以把1.37Mb的BMP位图文件压缩至20.3KB。当然也可以在图像质量和文件尺寸之间找到平衡点。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。
下载地址:ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
更多资料:http://www.optix.org/~dxy/solaris/jpegsrc/
tar xvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
mkdir -pv /usr/local/man/man1
cp /usr/share/libtool/config.guess .
cp /usr/share/libtool/config.sub .
./configure --enable-static --enable-shared
sed -i '/CFLAGS=/ s/$/ -fPIC/' Makefile
make
make install-lib
make install
libmcrypt安装
libmcrypt是加密算法扩展库。支持DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+等算法。
tar xvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure && make && make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make && make install
libpng库安装
libpng 软件包包含 libpng 库.这些库被其他程式用于读写png文件. libpng库解码png图片
PNG 库是用来创立和操作PNG 格式的图像文件.PNG 格式是设计来替代GIF,他对于更小范围的TIFF(标记图象文件格式)来说, 有了非常多的进步和拓展并且减少了关于专利权的麻烦.
tar xvf libpng-1.5.9.tar.bz2
cd libpng-1.5.9/
./configure --prefix=/usr/local/libpng
make && make install
ln -sf /usr/local/libpng/include/pngconf.h /usr/include
ln -sf /usr/local/libpng/include/png.h /usr/include
ln -sf /usr/local/libpng/include/pnglibconf.h /usr/include/
curl安装
tar xvf curl-7.24.0.tar.gz
cd curl-7.24.0/
./configure
make && make install
Libxml2库安装
Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。功能还是相当强大的,相信满足一般用户需求没有任何问题。
tar xvf libxml2-2.6.30.tar.gz
cd libxml2-2.6.30/
./configure --prefix=/usr/local/services/php -with-mysql=/usr/loca/services/mysql/ -with-xml2-config=/usr/local/lib
make && make install
zlib库安装
zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。截至2007年3月,zlib是包含在Coverity的美国国土安全部赞助者选择继续审查的开源项目。
tar xvf zlib-1.2.3.tar.gz
cd zlib/1.2.3/
./configure --prefix=/usr/local/zlib
make && make install
gd库安装
gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
tar xvf gd-2.0.35.tar.gz
cd gd/2.0.35/
./configure --prefix=/usr/local/gd2/ --with-zlib=/usr/local/zlib/ --with-jpeg --with-png=/usr/local/libpng/
make && make install
PHP 5.3.10安装
tar xvf php-5.3.10.tar.bz2
cd php-5.3.10/
./configure --prefix=/usr/local/services/php --with-config-file-path=/usr/local/services/php/etc \
--with-mysql=/usr/local/services/mysql --with-mysqli=/usr/local/services/mysql/bin/mysql_config \
--with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir=/usr/local/libpng \
--with-zlib=/usr/local/zlib --with-libxml-dir=/usr/local/services/php/lib/libxml2.so --enable-xml --disable-rpath \
--enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem \
--enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex \
--enable-fpm --enable-mbstring \
--with-mcrypt --with-gd=/usr/local/gd2 --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl \
--enable-sockets --with-xmlrpc --enable-zip --enable-soap
ln -s /usr/local/services/mysql/lib/libmysqlclient.so.18 /usr/lib64/
ldconfig
make ZEND_EXTRA_LIBS='-liconv' && make install
PHP优化
编译安装php扩展模块(此扩展资料来自老男孩linux运维培训机构)
安装eaccelerator缓存加速模块
eAccelerator是一个自由的开放源代码的php加速、优化和动态内容缓存扩展模块,提升php程序的缓存性能,降低PHP程序在解析时对服务器的性能开销。eAccelerator还有对PHP优化作用,加快其执行效率。使PHP程序代码执效率能提高1-10倍;
tar xvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
/usr/local/services/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/services/php/bin/php-config
make && make install
提示:
1)php5.3.10 可用eaccelerator-0.9.6版本,如果使用0.9.5.2版本在make阶段会报如下错误:
make: *** [optimize.lo] Error 1
2) php5.2.6 可用eaccelerator-0.9.5.2版本
提示:其他php和eaccelerator的对应关系,请同学们自行测试或参考官方文档说明。
eaccelerator资料:
http://sourceforge.net/projects/eaccelerator/files/latest/download
http://eaccelerator.net/wiki/Settings
http://eaccelerator.net/wiki/InstallFromSource
http://eaccelerator.net/wiki/TroubleShooting#Veryfiing
安装memcache缓存扩展模块(这里用到的版本有点低了,大家可换新点的稳定版)
软件说明:(如果公司没用这服务,就没必要装)
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
Memcache分为服务端软件(名字如:memcached-1.4.3.tar.gz)和客户端插件(名字如:memcache-2.2.5.tgz)两部分,本文就是客户端插件在php服务中的安装。
tar xvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/usr/local/services/php/bin/phpize
./configure --with-php-config=/usr/local/services/php/bin/php-config
make && make install
安装PDO_MYSQL扩展模块
插件说明:
PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。
tar xvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
/usr/local/services/php/bin/phpize
./configure --with-php-config=/usr/local/services/php/bin/php-config --with-pdo-mysql=/usr/local/services/mysql
make && make install
安装图像处理程序及imagick扩展模块
软件说明:
ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存,对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。同时ImageMagick提供了一个高质量的2D工具包,部分支持SVG。现在,ImageMagic的主要精力集中在性能、减少bug以及提供稳定的API和ABI上。
1. 将图片从一个格式转换到另一个格式,包括直接转换成图标。
2. 改变尺寸、旋转、锐化(sharpen)、减色、图片特效
3. 缩略图片的合成图( a montage of image thumbnails)
4. 适于web的背景透明的图片
5. 将一组图片作成gif动画,直接convert
6. 将几张图片作成一张组合图片,montage
7. 在一个图片上写字或画图形,带文字阴影和边框渲染。
8. 给图片加边框或框架
9. 取得一些图片的特性信息
10,几乎包括了gimp可以作到的常规插件功能。甚至包括各种曲线参数的渲染功能。只是那命令的写法,够复杂。
下载:http://acelnmp.googlecode.com/files/ImageMagick-6.7.5-10.tar.gz
tar xvf ImageMagick.tar.gz
cd ImageMagick-6.7.5-10
./configure
make && make install
安装imagick php扩展插件
插件说明:
特别提示:imagick插件工作需要ImageMagick软件的支持,所以,必须要先安装ImageMagick,否则会报错。
一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。
装了ImageMagick-6.7.5-10图像程序后,再装php的扩展imagick插件,才能使用ImageMagick-6.7.5-10提供的api来进行图片的创建与修改压缩等操作,都集成在imagick这个扩展中。
tar xvf imagick-2.3.0.tgz
cd imagick-2.3.0/
/usr/local/services/php/bin/phpize
./configure --with-php-config=/usr/local/services/php/bin/php-config
make && make install
功能性插件,如果开发人员没需求,可以暂时不考虑安装,如:PDO_MYSQL, memcache, imagick。
修改php.ini
vim /usr/local/services/php/etc/php.ini
extension_dir = "/usr/local/services/php/lib/php/extensions/no-debug-non-zts-20090626/"
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"
再查找output_buffering = Off
修改为output_buffering = On
再查找; cgi.fix_pathinfo=0
修改为cgi.fix_pathinfo=0,防止Nginx文件类型错误解析漏洞。详情:http://www.80sec.com/nginx-securit.html
配置eAccelerator加速PHP:
mkdir -p /usr/local/services/eaccelerator_cache
vim /usr/local/services/php/etc/php.ini
按shift+g键跳到配置文件的最末尾,加上以下配置信息:
#[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/usr/local/services/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
Tengine篇
安装TCMalloc优化Nginx的性能
简单介绍 TCMalloc 的全称是Rhread-Caching Malloc , 是谷歌开发的开源工具google-perftools 中的一个程序。与标准的glibc 库的Malloca,TCMalloc 库在内存分配效率和速度上要高很多,可以提高服务器在高并发情况下的性能,降低系统负载。要安装TCMalloc 库需要libunwind(32 位不需要)和google-perftools 两个包。64 位系统需要安装libunwind 库为64 位CPU 和操作系统的程序提供基本函数调用练和函数调用寄存器功能
安装libunwind库
下载地址:http://ftp.twaren.net/Unix/NonGNU//libunwind/
http://ftp.twaren.net/Unix/NonGNU//libunwind/libunwind-0.99.tar.gz
安装:
tar xf libunwind-0.99.tar.gz
cd libunwind-0.99
CFLAGS=-fpic ./configure
make CFLAGS=-fpic
make CFLAGS=-fPIC install
为什么不选择最新版本呢?google perftools 的INSTALL
文件中给了说明。版本低于0.99-beta 的libunwind 与preftools 一起工作可能不正常,但
是高于0.99-beta 的版本中可能包含一些与perftools 不兼容的代码(因为libunwind 会调
用malloc,可能会导致死锁)。libunwind 在X86_64 平台上和perftools 有不少问题,不过
不会影响核心的tcmalloc 库,但是会影响perftools 中的工具,例如cpu-profiler,
heap-checker,heap-profiler。
安装google-perftools
下载地址:https://code.google.com/p/gperftools/?redir=1
安装:
tar xf gperftools-2.1.tar.gz
cd gperftools-2.1
./configure
make
make install
echo "/usr/local/lib" >> /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig
为google-perftools添加线程目录
创建一个线程目录,这里将文件放在/tmp/tcmalloc下。
mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc
修改nginx.conf文件:
添加以下参数(在pid参数下面添加即可):
google_perftools_profiles /tmp/tcmalloc;
验证运行状态:
lsof -n |grep tcmalloc
你的CPU是几核的,就会显示多少个线程,每个线程文件后面的数字值就是启动的nginx的 pid值。
安装pcre
支持nginx伪静态,即rewirte
下载pcre:http://sourceforge.net/projects/pcre/files/pcre/8.33/
cd /usr/local/src/
tar xf pcre-8.33.tar.gz
cd pcre-8.33
./configure --prefix=/usr/local/pcre
make && make install
安装Tengine
下载Tengine:http://tengine.taobao.org/download_cn.html
useradd -M www -s /sbin/nologin
tar xvf tengine-1.5.1.tar.gz
cd tengine-1.5.1
./configure --prefix=/usr/local/tengine --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/soft/pcre-8.33 --with-google_perftools_module
make
make install
注意:--with-pcre=/usr/local/src/soft/pcre-8.33指向的是源码包解压的路径,而不是安装的路径,否则会报错。
设置nginx开机启动,编辑启动文件添加下面内容
vim /etc/rc.d/init.d/nginx
#!/bin/bash
# nginx(tengine) Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx(tengine) is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx(tengine)
# pidfile: /var/run/nginx.pid
# config: /usr/local/tengine/conf/nginx.conf
nginxd=/usr/local/tengine/sbin/nginx
nginx_config=/usr/local/tengine/conf/nginx.conf
nginx_pid=/usr/local/tengine/logs/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/tengine/logs/nginx.pid
}
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
设置脚本权限
chmod 775 /etc/rc.d/init.d/nginx
chkconfig nginx on
service nginx restart
nginx.conf配置
vim /usr/local/tengine/conf/nginx.conf
worker_processes auto;
worker_cpu_affinity auto;
error_log logs/error.log warn;
pid logs/nginx.pid;
user www;
worker_rlimit_nofile 65535;
google_perftools_profiles /tmp/tcmalloc;
events {
use epoll;
worker_connections 65535;
}
# load modules compiled as Dynamic Shared Object (DSO)
#dso {
# load ngx_http_fastcgi_module.so;
# load ngx_http_rewrite_module.so;
#}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
server_tag Apache;
server_admin 63780668@qq.com;
log_empty_request off;
server_info on;
#request_time_cache on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 30;
send_timeout 1m;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 128k;
client_max_body_size 20m;
client_body_buffer_size 256k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
gzip on;
gzip_comp_level 3;
gzip_min_length 1k;
gzip_vary on;
gzip_disable msie6;
gzip_buffers 4 16k;
gzip_types text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml;
server {
listen 80;
server_name localhost;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
location / {
root html;
index index.php index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location /status {
stub_status on;
access_log off;
auth_basic "drfdai";
auth_basic_user_file /usr/local/tengine/conf/htpasswd;
}
}
}
配置status访问权限
htpasswd -c /usr/local/tengine/conf/htpasswd drfdai
输入密码
确认密码
如果没有htpasswd命令,则安装httpd服务,在centos中,用yum install httpd -y安装
可在浏览器输入http://IP/status查看nginx运行状态
Active connections: 1
server accepts handled requests request_time
107926 107926 107143 100239050
Reading: 0 Writing: 1 Waiting: 0
Active connections表示当前活跃的连接数,第三行的3个数字表示nginx当前总共处理了107926连接,成功创建了107926次握手,总共处理100239050个请求。最后一行的Reading表示nginx读取到客户端Header信息数,Writing表示nginx返回给客户端的header信息数,Waiting表示nginx已经处理完、正在等候下一次请求指令时的驻留连接数。
其它配置
php-fpm配置
vim /usr/local/services/php/etc/php-fpm.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = warning
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 5s
daemonize = yes
events.mechanism = epoll
[www]
user = www
group = www
listen = 127.0.0.1:9000
listen.backlog = -1
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 10000
request_terminate_timeout = 500
rlimit_files = 65535
rlimit_core = 0
chroot =
chdir =
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php-fpm启动脚本
vim /etc/init.d/php-fpm
#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fpm
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
prefix=/usr/local/services/php
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
try=0
while test $try -lt 35 ; do
case "$1" in
'created')
if [ -f "$2" ] ; then
try=''
break
fi
;;
'removed')
if [ ! -f "$2" ] ; then
try=''
break
fi
;;
esac
echo -n .
try=`expr $try + 1`
sleep 1
done
}
case "$1" in
start)
echo -n "Starting php-fpm "
$php_fpm_BIN $php_opts
if [ "$?" != 0 ] ; then
echo " failed"
exit 1
fi
wait_for_pid created $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
stop)
echo -n "Gracefully shutting down php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -QUIT `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed. Use force-quit"
exit 1
else
echo " done"
fi
;;
force-quit)
echo -n "Terminating php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -TERM `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Reload service php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -USR2 `cat $php_fpm_PID`
echo " done"
;;
*)
echo "Usage: $0 {start|stop|force-quit|restart|reload}"
exit 1
;;
esac
可参考:http://sofar.blog.51cto.com/353572/1253208
chmod 700 /etc/init.d/php-fpm
/sbin/chkconfig --add php-fpm
/sbin/service php-fpm start
php-fpm日志切割与清理
vim /data/scripts/cut_php-fpm_log.sh
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
## the php-fpm access logs base path
PHPLOG_PATH="/data/logs/php"
if [ `ps aux | grep php-fpm: | grep -v grep | wc -l` -eq 0 ]; then
echo "The php-fpm is not running."
exit 1
fi
## cut php-fpm access logs
mv ${PHPLOG_PATH}/www.access.log ${PHPLOG_PATH}/www.access_$(date -d "yesterday" +"%Y-%m-%d").log
if [ -f /var/run/php-fpm.pid ]; then
kill -USR1 `cat /var/run/php-fpm.pid`
else
kill -USR1 `ps aux | grep php-fpm | awk '/master/{print $2}'`
fi
## clear 7 days ago's php-fpm access logs
rm -f ${PHPLOG_PATH}/www.access_$(date -d "7 days ago" +"%Y-%m-%d").log
# chmod +x /data/scripts/cut_php-fpm_log.sh
# crontab -e
00 00 * * * /data/scripts/cut_php-fpm_log.sh >/dev/null 2>&1
php-fpm健康检查
vim /data/scripts/check_php-fpm.sh
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
PORT='9000'
IPADDR='127.0.0.1'
retval=`nmap --system-dns -sT -p ${PORT} ${IPADDR} | grep open`
if [ "${retval}X" = "X" ]; then
killall -9 php-fpm >/dev/null 2>&1
/sbin/service php-fpm start
fi
# chmod +x /data/scripts/check_php-fpm.sh
# crontab -e
*/5 * * * * /data/scripts/check_php-fpm.sh >/dev/null 2>&1
参考
http://sofar.blog.51cto.com/353572/1289681
相关资料
Nginx使用的php-fpm的两种进程管理方式及优化
PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式。与Apache类似,它的进程数也是可以根据设置分为动态和静态的。
php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本。在5.2.x的版本中,php-fpm.conf使用的是xml格式,而在新的5.3.x版本中,则是和php.ini一样的配置风格。
在5.2.x版本中,php-fpm.conf中对于进程管理号称是有两种风格,一种是静态(static)的,一种是类似于apache风格(apache-like)的。
Process manager settings
<value name=”pm”>
Sets style of controling worker process count.
Valid values are ’static’ and ‘apache-like’
<value name=”style”>static</value>
按照文档的说明,如果pm的style采用apache-like,启动的进程数应该是和StartServers指定的一样。不过经过数次的尝试,会发现,实际上在这里将pm的style配置成apache-like没有起任何作用。也就是说,这里的apache-like并没有被实现。
不过,在最新的5.3.x的配套php-fpm中,apache风格的进程管理已经被实现了。
; Choose how the process manager will control the number of child processes.
; Possible Values:
; static - a fixed number (pm.max_children) of child processes;
; dynamic - the number of child processes are set dynamically based on the
; following directives:
; pm.max_children - the maximum number of children that can
; be alive at the same time.
; pm.start_servers - the number of children created on startup.
; pm.min_spare_servers - the minimum number of children in 'idle'
; state (waiting to process). If the number
; of 'idle' processes is less than this
; number then some children will be created.
; pm.max_spare_servers - the maximum number of children in 'idle'
; state (waiting to process). If the number
; of 'idle' processes is greater than this
; number then some children will be killed.
; Note: This value is mandatory.
;pm = dynamic
pm = static
由上面一段文字可知,对于进程的管理存在两种风格——static和dynamic。和之前的版本的进程管理其实还是一样的,只是将apache-like改成了dynamic,这样更容易理解。
如果设置成static,php-fpm进程数自始至终都是pm.max_children指定的数量,不再增加或减少。
如果设置成dynamic,则php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers。
这两种不同的进程管理方式,可以根据服务器的实际需求来进行调整。
这里先说一下涉及到这个的几个参数,他们分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。
pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。在更老一些的版本中,dynamic被称作apache-like。这个要注意看配置文件的说明。
下面4个参数的意思分别为:
pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。
如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。
如果dm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
那么,对于我们的服务器,选择哪种执行方式比较好呢?事实上,跟Apache一样,运行的PHP程序在执行完成后,或多或少会有内存泄露的问题。这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。
对于内存大的服务器(比如8G以上)来说,指定静态的max_children实际上更为妥当,因为这样不需要进行额外的进程数目控制,会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到,比如8GB内存可以设置为100,那么php-fpm耗费的内存就能控制在 2G-3G的样子。如果内存稍微小点,比如1G,那么指定静态的进程数量更加有利于服务器的稳定。这样可以保证php-fpm只获取够用的内存,将不多的内存分配给其他应用去使用,会使系统的运行更加畅通。
对于小内存的服务器来说,比如256M内存的VPS,即使按照一个20M的内存量来算,10个php-cgi进程就将耗掉200M内存,那系统的崩溃就应该很正常了。因此应该尽量地控制php-fpm进程的数量,大体明确其他应用占用的内存后,给它指定一个静态的小数量,会让系统更加平稳一些。或者使用动态方式,因为动态方式会结束掉多余的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或VPS上使用。具体最大数量根据 内存/20M 得到。比如说512M的VPS,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比较合适的值在5~10之间。
永久链接 : http://www.ha97.com/4339.html
2015 年 1 月 11 日 下午 6:07 板凳
好文章,内容横扫千军.
2015 年 1 月 4 日 下午 6:25 沙发
好文章,内容惊心动魄.