A-A+

Tengine+mysql+php(LTMP)环境部署

2013年10月15日 运维技术 评论 2 条 阅读 16,594 views 次

此文档只是测试时写的,没有在生产中使用,仅供学习使用,有什么问题,欢迎指出

 

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。

这两种不同的进程管理方式,可以根据服务器的实际需求来进行调整。

这里先说一下涉及到这个的几个参数,他们分别是pmpm.max_childrenpm.start_serverspm.min_spare_serverspm.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_serversphp-fpm进程,然后根据系统的需求动态在pm.min_spare_serverspm.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

关键词:

2 条留言  访客:2 条  博主:0 条

  1. avatar 隐形窗纱

    好文章,内容横扫千军.

  2. avatar 钢边橡胶止水带

    好文章,内容惊心动魄.

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: