20、httpd程序包自带的工具介绍
httpd:
httpd - Apache Hypertext Transfer Protocol Server
apache服务器程序
-t: 测试配置文件是否有语法错误
-l: 列表静态模块
-l Output a list of modules compiled into the server. This will not list dynamically loaded modules included using the LoadModule directive.
-D DUMP_MODULES:列出DSO模块
-M:
-D DUMP_VHOSTS: 列出所有虚拟主机
htpasswd:
为基于文件的basic认证创建和更新用户认证文件
apachectl:
apachectl - Apache HTTP Server Control Interface
脚本,httpd服务控制工具;
Usage: /usr/sbin/httpd [-D name] [-d directory] [-f file]
[-C "directive"] [-c "directive"]
[-k start|restart|graceful|graceful-stop|stop]
[-v] [-V] [-h] [-l] [-L] [-t] [-S]
在编译时,没有启动脚本时,可以用此命令来启动Apache
ab: apache benchmark
httpd的基准性能测试工具;
apxs:
httpd得以扩展使用第三方模块的工具;
htcacheclean:
磁盘缓存清理工具;
htdigest:
为digest认证创建和更新用户认证文件
httxt2dbm:
为rewrite map(重写映射表)创建dbm格式的文件
htcacheclean - Clean up the disk cache
rotatelogs:
rotatelogs - Piped logging program to rotate Apache logs
不关闭httpd而切换其使用日志文件的工具
access_log, access_log.1, access_log.2,(日志滚动)
/etc/logrotate.d/httpd 能自动实现日志滚动的 是rpm包安装才有的
suexec:
suexec - Switch user before executing external programs
User apache
Group apache
当httpd进程需要以另外的用户的身份去访问某些资源时,可以以suexec作临时切换;
21、ab工具的初步使用
ab - Apache HTTP server benchmarking tool
Apache基准性能测试工具
生产环境、测试环境、开发环境
同类工具:http_load, webbench, seige
Usage: ab [options] [http[s]://]hostname[:port]/path
-c #: 模拟的并发数;
-c concurrency
Number of multiple requests to perform at a time. Default is one request at a time.
-n #: 总的请求数
-n requests
Number of requests to perform for the benchmarking session. The default is to just perform a single request which usually leads to non-representative benchmarking results.
-n的值一定要大于等于-c的值;
=================
tcpcopy 模拟真正的环境来进行测试
tcpcopy-0.9.6-1.el6.x86_64
=================
在另外一台主机上发起压力测试,并发200个请求,总共请求5000次,注意在压测时,可以访问服务器的状态页面,就能看到服务器工作的大量信息
[[email protected] ~]# ab -c 200 -n 5000 http://192.168.20.163/compress
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.20.163 (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: Apache
Server Hostname: 192.168.20.163
Server Port: 80
Document Path: /compress
Document Length: 312673 bytes
Concurrency Level: 200 并发级别为200个
Time taken for tests: 133.513 seconds 整个测试所经过的时长
Complete requests: 5000 完成请求的个数为5000个
Failed requests: 0
Write errors: 0
Total transferred: 1568340024 bytes 此次传输一共多少个字节
HTML transferred: 1567036644 bytes 一共传输的html有多少字节,基本都是html的内容
Requests per second: 37.45 [#/sec] (mean) 每秒钟完成的请求个数
Time per request: 5340.508 [ms] (mean) 并发一次请求所经过的时长
Time per request: 26.703 [ms] (mean, across all concurrent requests) 每一次请求所经过的时长
Transfer rate: 11471.43 [Kbytes/sec] received 使用带宽11471.43/1024大约为11Mbps
Connection Times (ms)
min mean[+/-sd] median max
Connect: 3 481 165.9 506 3156
Processing: 210 4798 972.9 4796 14069
Waiting: 32 892 1079.2 546 10284
Total: 214 5279 1064.2 5321 15102
Percentage of the requests served within a certain time (ms)
50% 5321
66% 5333
75% 5342
80% 5351
90% 5456
95% 5837
98% 6411
99% 9182
100% 15102 (longest request)
测试条件:在测试时,能够正常打开网页的,测试有效在3-5s之内访问正常
[[email protected] ~]# ab -c 500 -n 10000 http://192.168.20.163/compress
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.20.163 (be patient)
apr_socket_recv: Connection reset by peer (104)
Total of 221 requests completed
打开太多文件了,直接退出,因为web服务器在VMware workstation上,处理性能比较低
Linux限定每个普通用户最多只能打开1024个文件
22、资源限定
软限定:可临时超出一定时长的上限,达到时长后,超出的会全部关闭
硬限定:绝对不可超出的上限
管理员可使用ulimit命令临时性地修改各种资源的软限制;
ulimit -n #:显示能同时打开的文件数
-u #: 能同时启动的进程数
[[email protected] ~]# ulimit -n
1024
[[email protected] ~]# ulimit -u
3686
Modify shell resource limits.
Provides control over the resources available to the shell and processes
it creates, on systems that allow such control.
[[email protected] ~]# ulimit -n 5000
[[email protected] ~]# ulimit -n
5000
可以设置访问限制
永久修改,配置文件:
/etc/security/limits.conf 文件中有使用帮助可以#man limits.conf查看帮助手册
/etc/security/limits.d/*.conf
此处已经安装好了apache,apache又是在Linux上工作,加下来就要安装MySQL了
MySQL安装:
三种方式:
1、rpm包安装(两种类型)
(1) OS vendor (发行商所提供的rpm包)
(2) 项目方提供
2、通用二进制格式
展开、配置后即可使用
3、源码编译安装
使用:cmake编译器
CentOS 6.x:
mysql-server:
服务脚本:/etc/rc.d/init.d/mysqld
主服务程序:/usr/bin/mysqld_safe
数据文件:/var/lib/mysql
配置文件:/etc/my.cnf
客户端程序:/usr/bin/mysql
unix sock: /var/lib/mysql/mysql.sock 启动时,自动生成
mysql是单进程多线程模型,维持的是内部线程
mysqld第一次启动之前需要先初始化:
创建mysqld服务自身运行依赖元数据数据库:mysql
查看有哪些与MySQL相关的包
[[email protected] ~]# yum list all mysql*
。。。。
。。。。。
需要安装mysql-server包,提供mysql服务
[[email protected] ~]# yum install -y mysql-server
启动myql
[[email protected] ~]# service mysqld start
Initializing MySQL database: Installing MySQL system tables...初始化
OK
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password ‘new-password‘
/usr/bin/mysqladmin -u root -h localhost.localdomain password ‘new-password‘
Alternatively you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/bin/mysqlbug script!
[ OK ]
Starting mysqld: [ OK ]
[[email protected] httpd]# ss -tnlp | grep mysql
LISTEN 0 50 *:3306 *:* users:(("mysqld",27797,10))
MySQL起来了监听在tcp的3306端口,服务进程为mysqld
[[email protected] ~]# mysql 连接到MySQL服务器
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> show databases; 显示当前有哪些数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql> select User,Host,Password from mysql.user; 显示用户名和主机和密码
+------+-----------------------+----------+
| User | Host | Password |
+------+-----------------------+----------+
| root | localhost | |
| root | localhost.localdomain | |
| root | 127.0.0.1 | |
| | localhost | |匿名用户
| | localhost.localdomain | |匿名用户
+------+-----------------------+----------+
5 rows in set (0.00 sec)
mysql>
交互式命令:
客户端命令:无需分号结尾;
服务器端命令:必需分号结尾;
关于PHP
一、PHP简介
PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用。
Rasmus Lerdorf于1994年开始开发PHP,它最初是一组被Rasmus Lerdorf称作“Personal Home Page Tool” 的Perl脚本, 这些脚本可以用于显示作者的简历并记录用户对其网站的访问。后来,Rasmus Lerdorf使用C语言将这些Perl脚本重写为CGI程序,还为其增加了运行Web forms的能力以及与数据库交互的特性,并将其重命名为“Personal Home Page/Forms Interpreter”或“PHP/FI”。此时,PHP/FI已经可以用于开发简单的动态web程序了,这即是PHP 1.0。1995年6月,Rasmus Lerdorf把它的PHP发布于comp.infosystems.www.authoring.cgi Usenet讨论组,从此PHP开始走进人们的视野。1997年,其2.0版本发布。
1997年,两名以色列程序员Zeev Suraski和Andi Gutmans重写的PHP的分析器(parser)成为PHP发展到3.0的基础,而且从此将PHP重命名为PHP: Hypertext Preprocessor。此后,这两名程序员开始重写整个PHP核心,并于1999年发布了Zend Engine 1.0,这也意味着PHP 4.0的诞生。2004年7月,Zend Engine 2.0发布,由此也将PHP带入了PHP 5时代。PHP5包含了许多重要的新特性,如增强的面向对象编程的支持、支持PDO(PHP Data Objects)扩展机制以及一系列对PHP性能的改进。
二、PHP Zend Engine
Zend Engine是开源的、PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司。
Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且经过高度优化,并能够做为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用。
Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend opcode的二进制格式(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode。
三、PHP的Opcode
Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL。
PHP执行PHP脚本代码一般会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend):
1、Scanning(Lexing) —— 将PHP代码转换为语言片段(Tokens)
2、Parsing —— 将Tokens转换成简单而有意义的表达式
3、Compilation —— 将表达式编译成Opocdes
4、Execution —— 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能
扫描-->分析-->编译-->执行
四、php的加速器
基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。由此也可以看出,这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的。
常见的php加速器有:
1、APC (Alternative PHP Cache)
遵循PHP License的开源框架,PHP opcode缓存加速器,目前的版本不适用于PHP
5.4。项目地址,http://pecl.php.net/package/APC。
2、eAccelerator
源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前
encoder已经不在支持。项目地址, http://eaccelerator.net/。
3、XCache
快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。项目地址
,http://xcache.lighttpd.net/
4、Zend Optimizer和Zend Guard Loader
Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为PHP5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由Zend Guard生成的加密的PHP代码或模糊代码。 而Zend Guard Loader则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展。
项目地址,http://www.zend.com/en/products/guard/runtime-decoders
5、NuSphere PhpExpress
NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。
项目地址,http://www.nusphere.com/products/phpexpress.htm
五、PHP源码目录结构
PHP的源码在结构上非常清晰。其代码根目录中主要包含了一些说明文件以及设计方案,并提供了如下子目录:
1、build —— 顾名思义,这里主要放置一些跟源码编译相关的文件,比如开始构建之前的buildconf脚本及一些检查环境的脚本等。
2、ext —— 官方的扩展目录,包括了绝大多数PHP的函数的定义和实现,如array系列,pdo系列,spl系列等函数的实现。 个人开发的扩展在测试时也可以放到这个目录,以方便测试等。
3、main —— 这里存放的就是PHP最为核心的文件了,是实现PHP的基础设施,这里和Zend引擎不一样,Zend引擎主要实现语言最核心的语言运行环境。
4、Zend —— Zend引擎的实现目录,比如脚本的词法语法解析,opcode的执行以及扩展机制的实现等等。
5、pear —— PHP 扩展与应用仓库,包含PEAR的核心文件。
6、sapi —— 包含了各种服务器抽象层的代码,例如apache的mod_php,cgi,
fastcgi以及fpm等等接口。
7、TSRM —— PHP的线程安全是构建在TSRM库之上的,PHP实现中常见的*G宏通常是对TSRM的封装,TSRM(Thread Safe Resource Manager)线程安全资源管理器。
8、tests —— PHP的测试脚本集合,包含PHP各项功能的测试文件。
9、win32 —— 这个目录主要包括Windows平台相关的一些实现,比如sokcet的实现在Windows下和*Nix平台就不太一样,同时也包括了Windows下编译PHP相关的脚本。
php.ini官方文档:
配置参数:http://www.php.net/manual/zh/ini.list.php
核心配置参数详解:http://www.php.net/manual/zh/ini.core.php
php的安装:
rpm包
编译安装
[[email protected] httpd]# yum install -y php php-mysql
[[email protected] httpd]# rpm -ql php
/etc/httpd/conf.d/php.conf
/usr/lib64/httpd/modules/libphp5.so
/var/lib/php/session
/var/www/icons/php.gif
[[email protected] httpd]# rpm -ql php-mysql
/etc/php.d/mysql.ini
/etc/php.d/mysqli.ini
/etc/php.d/pdo_mysql.ini
/usr/lib64/php/modules/mysql.so
/usr/lib64/php/modules/mysqli.so
/usr/lib64/php/modules/pdo_mysql.so
提供php测试页面
[[email protected] httpd]# cat /web/love_oi/index.php
<?php
phpinfo();
?>
重启httpd
[[email protected] httpd]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: Could not reliably determine the server‘s fully qualified domain name, using localhost.localdomain for ServerName
在客户端访问
[ OK ]
提供连接MySQL的测试文件
[[email protected] httpd]# cat /web/love_oi/index.php
<?php
$link = mysql_connect(‘127.0.0.1‘,‘root‘,‘‘);
if ($link)
echo "Success...";
else
echo "Failure...";
mysql_close();
phpinfo();
?>
在客户端访问测试页面
部署wordpress,解压wordpress,把cp wp-config-sample.php wp-config.php已提供配置文件,此时访问时会出现
Error establishing a database connection
[[email protected] love_oi]# tar xf wordpress-3.9.1.tar.gz
[[email protected] love_oi]# ls
bacula-7.0.5.tar.gz index.php wordpress
compress phpMyAdmin-4.1.13-english.tar.gz wordpress-3.9.1.tar.gz
[[email protected] love_oi]# cd wordpress
[[email protected] wordpress]# ls
index.php wp-admin wp-content wp-load.php wp-signup.php
license.txt wp-blog-header.php wp-cron.php wp-login.php wp-trackback.php
readme.html wp-comments-post.php wp-includes wp-mail.php xmlrpc.php
wp-activate.php wp-config-sample.php wp-links-opml.php wp-settings.php
[[email protected] wordpress]# cp wp-config-sample.php wp-config.php
提供wordpress存储数据的数据库
mysql> create database wordpress; 新建数据库
Query OK, 1 row affected (0.00 sec)
把数据库授权给wordpress,并给其提供密码
mysql> grant all on wordpress.* to ‘wordpress‘@‘192.168.20.%‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges; 刷新授权表
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
编辑wp-config.php
指定wordpress的数据库和用户名和密码,可以新建一个数据库,再给其授权
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define(‘DB_NAME‘, ‘database_name_here改为wordpress‘);
/** MySQL database username */
define(‘DB_USER‘, ‘username_here改为wordpress‘);
/** MySQL database password */
define(‘DB_PASSWORD‘, ‘password_here改为123456‘);
/** MySQL hostname */
define(‘DB_HOST‘, ‘localhost改为192.168.20.163‘);
再从客户端访问时显示如下
安装好后,登录进去就是如下界面:
部署phpmyadmin
[[email protected] love_oi]# tar xf phpMyAdmin-4.1.13-english.tar.gz -C /web/love_op/
[[email protected] love_oi]# cd /web/love_op/
[[email protected] love_op]# ls
index.html phpMyAdmin-4.1.13-english
[[email protected] love_op]# mv phpMyAdmin-4.1.13-english phpmyadmin
phpmyadmin部署后,访问不显示任何信息,日志记录如下
PHP Fatal error: Call to undefined function mb_detect_encoding()
in /web/love_op/phpmyadmin/libraries/php-gettext/gettext.inc on line 177
说明编码格式不支持
# yum install -y php-mbstring 安装对编码的支持
# rpm -ql php-mbstring
# service httpd restart 或重新加载才能生效
此时访问正常了,显示
提供访问phpmyadmin的用户
mysql> grant all on phpmyadmin.* to ‘root‘@‘localhost‘ identified by ‘123456‘;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
用root用户登录显示如下:
此时可以管理MySQL了
部署一个discuz,如下操作:
[[email protected] love_cn]# unzip Discuz_X3.1_SC_UTF8.zip
[[email protected] discuz]# ls /web/love_cn
readme upload utility
在客户端访问192.168.20.163:8080/upload,显示如下:
显示这种情况时,就在
[[email protected] upload]# pwd
/web/love_cn/upload 下把对应文件和文件的权限{其他用户有些权限}给定后,刷新访问页面就ok了
[[email protected] upload]# chmod o+w config/ data/ data/{cache,avatar,plugindata,download,addonmd5,template,threadcache,attachment}
[[email protected] upload]# chmod o+w data/attachment/{album,forum,group} data/log
[[email protected] upload]# chmod o+w uc_client/data/cache uc_server/data uc_server/data/{cache,avatar,backup,logs,tmp,view}
创建数据库,并且授权给用户
mysql> create database ultrax;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on ultrax.* to ‘root‘@‘localhost‘ identified by ‘root‘;
Query OK, 0 rows affected (0.00 sec)
安装好后,就显示如下界面
接下来再对部署的几个应用中的其中一个做压力测试,测试后通过提供一个xcache来应用php的加速,把mysql分离,后续提供MySQL的主从复制和自动化运维工具ansible的讲解看看具体能提供怎样的性能,欲知后续如何,请看下回分解,