LNMP环境搭建

来源:互联网 发布:三国演义的漏洞 知乎 编辑:程序博客网 时间:2024/06/03 16:32

nginx


安装nginx需要用到gcc,zlib-devel,openssl-devel,pcre-devel

想省事的话可以直接yum安装,

我用yum安装了gcc,zlib-devel,openssl-devel

然后源码安装pcre-devel

./configure && make && make install

echo "/usr/local/lib" >> /etc/ld.so.conf

ldconfig


利用TCMalloc优化nginx性能

TCMalloc全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员。与标准的glibc库的Malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程度上提高了服务器在高并发情况下的性能,从而降低了系统的负载。

要安装TCMalloc要安装libunwind(32位操作系统不需要安装)和google-perftools两个软件包,libunwind库为基于64位CPU和操作系统的程序提供了基本函数调用链和函数调用寄存器功能。


libunwind下载地址http://download-mirror.savannah.gnu.org/releases/libunwind/

安装libunwind方法:

CFLAGS=-fPIC ./configure

make CFLAGS=-fPIC

make CFLAGS=-fPIC install


安装google-perftools:

./configure   #默认安装路径/usr/lcoal/bin  /usr/local/lib

make && make install

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf     #建立动态链接库 

ldconfig      刷新一下动态链接库


nginx安装方法:

进入nginx源码包,进入auto/cc/gcc文件,找到

# debug

CFLAGS = "$CFLAGS -g"   把它注释掉或者删除掉优化编译参数


进入nginx源码根目录用以下指令安装,把TCMalloc编译进nginx

./configure --prefix=/usr/local/nginx --with-pcre=/usr/lcoal/src/pcre-8.38 --with-http_stub_status_moduel --with-http_gzip_static_module --with-google_perftools_module

make && make install

--with-pcre后面要跟pcre源码包的路径,不是安装路径

为google-perftools添加一个线程目录:

mkdir /tmp/tcmalloc

chmod 0777 /tmp/tcmalloc


修改/usr/local/nginx/conf/nginx.conf:

#pid       logs/nginx.pid;

google_perftools_profiles  /tmp/tcmalloc     #添加此行


然后把echo "PATH=/usr/local/nginx/sbin:$PATH" >> /etc/bashrc

成功之后,source /etc/bahsrc重新加载一下

把nginx加入环境变量,就可以直接使用nginx启动进程了

可以用nginx -t来进行nginx启动前检测

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

看到这种提示,表示可以正常启动


用lsof -n | grep tcmalloc查看是否正常启动tcmalloc

[root@localhost ~]# lsof -n | grep tcmalloc

nginx     12030    nobody 10w     REG       8,5       0   2490448 /tmp/tcmalloc.12030

nginx     12031    nobody 12w     REG       8,5       0   2490450 /tmp/tcmalloc.12031

nginx     12032    nobody 14w     REG       8,5       0   2490451 /tmp/tcmalloc.12032

nginx     12033    nobody 16w     REG       8,5       0   2490453 /tmp/tcmalloc.12033

此处我开了4个nginx进程,所以tcmalloc有四个


linux系统下针对nginx应用的内核参数优化,把以下参数加入/etc/sysctl.conf中

net.ipv4.tcp_max_tw_buckets =6000                 #设定timewait的数量,默认是180000,这里设为6000

net.ipv4.ip_local_pore_range =1024 65000       #用来设定允许系统打开的端口范围

net.ipv4.tcp_tw_recycle =1#设置启用timewait快速回收

net.ipv4.tcp_tw_reuse =1#设置开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接

net.ipv4.tcp_syncookies = 1#用于设置开启SYN Cookies,当出现SYN等待队列溢出时,启动cookies进行处理

net.core.somaxconn =262144#默认值是128,这个参数用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致连接超时或者重传,因#此,需要结合并发请求数来调节此值

net.core.netdev_max_backlog =262144#表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目

net.ipv4.tcp_max_orphans =262144#用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位并#打印出警告信息。这个限制只是为了防止简单的DoS攻击。不能过分依靠这个限制甚至人为减少这个值,更多的情况下应该增#加这个值

net.ipv4.tcp_max_syn_backlog =262144#用于记录那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,此参数的默认值是1024,对小内#存的系统则是128

net.ipv4.tcp_syn_retries =1#决定了内核放弃建立连接之前发送SYN包的数量

net.ipv4.tcp_synack_retries =1#决定了内核放弃连接之前发送SYN+ACK包的数量

net.ipv4.tcp_fin_timeout =1#决定了套接字保持在FIN-WAIT-2状态的时间。默认值是60秒。正确设置这个值非常重要,有时即使一个负载很小的Web服务#器,也会出现大量的死套接字而产生内存溢出的风险。FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能消耗1.5KB的#内存,但是其生存期长些

net.ipv4.tcp_keepalive_time =30#表示当keepalive启用的时候,TCP发送keppalive消息的频度。默认值是2(单位是小时)。

然后执行/sbin/sysctl -p使之生效


php7.1.12安装 

需要的软件 

yum -y install gcc gcc-c++ libxml2 libxml2-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel

此版本的php已经把php-fpm整合进去,可以直接编译安装 --enable-fpm

./configure --prefix=/usr/local/php --enable-fpm

make && make install

cp php.ini.development /usr/local/php/lib/php.ini

然后

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

在/etc/bashrc文件末尾加上PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH

然后可以执行php -v 查看版本 php-fpm启动fpm进程

还需要配置nginx的主配置文件让它支持fastcgi

把下面这些行取消掉注释 路径换成自己需要的

location ~ \.php$ {

             root           /usr/local/nginx/html/adminer;

             fastcgi_pass   127.0.0.1:9000;

             fastcgi_index  index.php;

             fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/adminer$fastcgi_script_name;

             include        fastcgi_params;

         }


在http层级加入如下fastcgi优化参数

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;

fastcgi_cache_key "$scheme$request_method$host$request_uri";

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 128k;

fastcgi_cache TEST;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;


memcached安装

需要先安装libevent

./configure && make && make  install

下载memcached

./configure && make && make install 

export PATH=/usr/local/bin/memcached:$PATH

启动方式:

memcached -m 32m -p 11211 -d -u root -P /var/run/memcached.pid -c 256 -vv

关闭方式

kill `cat /var/run/memcached.pid`


安装php的memcache扩展

pecl官方的memcache已经很久没更新了,我试了最新的版本,总是报错

到这个地址下载:https://github.com/websupport-sk/pecl-memcache/archive/php7.zip

unzip pecl-memcache-php7.zip

cd pecl-memcache-php7

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache

make && make install

vim /usr/local/php/lib/php.ini

找到extension_dir="./"

替换为

extension_dir="

/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303

"

添加extension=memcache.so

php -m查看是否有memcache扩展

测试是否成功

touch /usr/local/nginx/html/testmemcache.php  #创建文件

内容如下:

<?php

$mem = new Memecache;

$mem->connect('127.0.0.1',11211);

$mem->set('test','Hello World!',0,12);

$val = $mem->get('test');

echo $val;

?>

memcached -m 32m -p 11211 -d -u root -P /var/run/memcached.pid -c 256 -vv

以上命令打开memcached

输入地址localhost/testmemcache.php

如果出现Hello World!表示成功!


UDFs实现Memcached和MySQL的自动更新

需要用到libevent->memcached->libmemcached-0.34->memcached_functions_mysql-1.1   MySQL

libevent,memcached已经安装好了,都是默认安装路径/usr/local

libmemcached安装方法

./configure --with-memcached && make && make install

memcached_functions_mysql-1.1安装方法

./configure --prefix=/usr/local/memcached_mysql --with-mysql=/usr/local/mysql/bin/mysql_config --with-libmemcached && make && make install

cp /usr/local/memcached_mysql/lib/libmemcached_functions_mysql.* /usr/local/mysql/lib/plugin/


打开mysql

source /usr/local/src/memcached_functions_mysql-1.1/sql/install_functions.sql;

select name,dl from mysql.func;查看是否写入成功


设置UDFs操作memcached服务器的ip地址和端口,此处我安装在本地,用127.0.0.1

mysql>select memc_servers_set('127.0.0.1:11211'); #显示0


查看memcached服务器的数量

mysql>select memc_server_count();    #显示1

列出可以修改Memcached参数的行为

mysql>select memc_list_behaviors() \G


设置MEMCACHED_BEHAVIOR_NO_BLOCK为打开状态,这样在Memcached出现问题(不能连接)时,数据可以继续插入MySQL中,但有报错提示:如果不设置此值,那么Memcached失败时,数据需要等到Memcached失败超时后才可以插入到表中。通过以下设置可以避免这种情况发生

mysql>select memc_servers_behavior_set('MEMCACHED_BEHAVIOR_NO_BLOCK','1');

mysql>select memc_servers_behavior_set('MEMCACHED_BEHAVIOR_TCP_NODELAY','1');


原创粉丝点击