如何安装php7的event扩展

最近api系统遇到了高并发的瓶颈,想通过workerman重构。在看workerman文档时发现这么一句话:

Event扩展不是必须的,当业务需要支撑上万并发连接时,推荐安装Event,能够支持巨大的并发连接。如果业务并发连接比较低,例如1000并发连接,则可以不用安装。

如果无法安装Event扩展,可以用libevent扩展代替,注意目前libevent扩展不支持php7,php7用户只能使用Event扩展。

业务的服务器是php7以上,所以不能考虑libevent了,只能安装event扩展了。

以下是我的安装步骤:

1、安装libevent库,并非libevent扩展。

到 http://libevent.org/ 官网上下载最新稳定版,也可以在命令行执行

拿到包以后解压安装即可

测试是否安装成功

提示如下则表示安装成功

1

1、安装event扩展。

到php官方下载event扩展的最新稳定包 https://pecl.php.net/package/event,也可以在命令行执行

拿到包手解压安装即可

最后提示下图则表示安装成功

2

最后在php.ini中加入

重启php-fpm即可

注意:

我在重启php-fpm的时候提示

[14-Dec-2016 10:51:25] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/event.so’ – libevent_openssl-2.0.so.5: cannot open shared object file: No such file or directory in Unknown on line 0
<br />
<b>Warning</b>: PHP Startup: Unable to load dynamic library ‘/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/event.so’ – libevent_openssl-2.0.so.5: cannot open shared object file: No such file or directory in <b>Unknown</b> on line <b>0</b><br />
[14-Dec-2016 10:51:26] NOTICE: configuration file /usr/local/php/etc/php-fpm.conf test is successful

表示系统未找到 libevent_openssl-2.0.so.5,这时需要将 /usr/lib加入到ld.so.conf中

再次重启php-fpm即可

3

如果重启 fpm 还是报错,例如:

说明你系统中的 lib64可能存在 libevent 模块,造成冲突了,可以通过命令

来检查 lib64目录是否有 libevent 文件

如果存在文件则删除后重新编译 event 扩展即可

大功告成~

发表在 操作系统相关 | 标签为 , | 一条评论

php获取url的301/302后url

方法一:

在php获取http头部信息上,php有个自带的函数get_headers(),我以前也是用这个的,听说效率在win上不咋地,再加上最近研究百度url无果,写了cURL获取重定向url的php代码来折腾。
以前我是用get_headers来获取跳转后的url

方法二:

CURL是需要设置curl_setopt 和curl_getinfo才可以获取 Location:重定向

 

发表在 BS架构后台语言 | 标签为 , , , | 留下评论

Web性能压力测试工具之ApacheBench(ab)详解

网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网站访问压力测试。

ApacheBench命令原理:

ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。

ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。

ApacheBench参数说明

ApacheBench用法详解:

Linux系统,一般安装好Apache后可以直接执行;

如果是Win系统下,打开cmd命令行窗口,cd到apache安装目录的bin目录下;

-n后面的4000代表总共发出4000个请求;-c后面的1000表示采用1000个并发(模拟1000个人同时访问),后面的网址表示测试的目标URL。

稍等一会得到类似如下显示结果:

1477394743-7533-ab

结果分析:

总结:在远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大),建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。如果只有单独的一台服务器,可以直接本地测试,比远程测试效果要准确。

发表在 应用工具软件, 操作系统相关 | 标签为 , | 留下评论

ab批量压测脚本

[前言]:

ab(Apache benchmark)是一款常用的压力测试工具。简单易用。然而与hp load runner比起来就不那么顺手了。ab的命令行一次只能支持一次测试。相要批量执行不同的测试方式,并自动对指标进行分析,那么单靠手工运行ab,一定会累到像狗一样趴下。好了,问题来了,批量模式怎么实现,那就要靠我们强大的shell了。

测试的同学,让我来解放你的双手。全新的ab压力测试工具ab-test-tools.sh闪亮登场!! ^_^

[脚本说明]:
本脚本支持ab大多常用参数,如果你需要更多参数,可以通过修改本脚本,加入你想要的即可。本脚本的特色:

  1. 批量测试。注意,并不是简单的批量测试,你可以定测测试轮数,间隔时间。
  2. 阶梯并发增长定制测试,如并发从100到1000,每轮测5次等。
  3. 支持ab的post file模式,你只要在参数-P | –postfile中带上你的数据文件即可。
  4. 即时指标分析显示,本shell可以将ab中常用的指示即时分析出来,测试完成后即进告知你结果。

脚本说明:

命令格式:

ab-test-tools.sh

-N|–count 总请求数,缺省 : 5w
-C|–clients 并发数, 缺省 : 100
-R|–rounds 测试次数, 缺省 : 10 次
-S|-sleeptime 间隔时间, 缺省 : 10 秒
-I|–min 最小并发数, 缺省: 0
-X|–max 最大并发数,缺省: 0
-J|–step 次递增并发数
-R|–runtime 总体运行时间,设置此项时最大请求数为5w
-P|–postfile post数据文件路径
-U|–url 测试地址

[脚本代码]:

[测试示例]:

./ab_test_tool.sh -N2000 -R 2 -I 100 -X 1000 -J 100 -S 5 -U http://www.zzstudio.net/

1477394529-7156-Jtso2RWiGNPuVqGhdeUS2A

[注意事项]:

  • 每次测试结果以“yymmddhhiiss.out”存放在脚本所在目录,因此请保持脚本目录可写。
  • ab的所有输出结果均可在.out中查到。测试结果只是展示部份指标,需要详细的可以在.out文件中查看
  • 查看使用帮助可使用-h/–help。
  • linux终端默认1024限制,如需大于此数,请使用管理员执行:”ulimit -n 655350″
  • 本脚本未经时间检验,如有BUG,请及进反馈。
发表在 应用工具软件, 操作系统相关 | 标签为 , | 留下评论

CentOS下安装Composer

1、将composer.phar下载到项目中

使用curl -sS https://getcomposer.org/installer | php下载Composer 的二进制文件,是一个 PHAR 包(PHP 的归档)

2、可以通过 –install-dir 选项指定 Composer 的安装目录(它可以是一个绝对或相对路径):

3、如果把composer.phar放在系统的 PATH 目录中,就能在全局访问composer.phar。 在类Unix系统中,你甚至可以在使用时不加 php 前缀。可以执行这些命令让 composer 在你的系统中进行全局调用:

或添加别名

现在只需要运行 composer 命令就可以使用 Composer 而不需要输入 php composer.phar。

4、检查 Composer 是否正常工作,只需要通过 php 来执行 PHAR:php composer.phar这将返回给你一个可执行的命令列表。

1477386721-4699-2834acc6b5e55eb5c9ea14cebff8
1477386721-2486-d42abf698245063b5bb5c8eab8f8
1477386721-9879-ad6eca6aeb0484cb39dbb7fd3c48
发表在 应用工具软件 | 标签为 | 留下评论

Linux系统下安装rz/sz命令及使用说明

对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令。今天,我们就简单的讲解一下如何安装和使用rz、sz命令。

1.软件安装

(1)编译安装

root 账号登陆后,依次执行以下命令:

上面安装过程默认把lsz和lrz安装到了/usr/local/bin/目录下,现在我们并不能直接使用,下面创建软链接,并命名为rz/sz:

(2)yum安装

root 账号登陆后执行以下命令:

2.使用说明

sz命令发送文件到本地:

rz命令本地上传文件到服务器:

执行该命令后,在弹出框中选择要上传的文件即可。

说明:打开SecureCRT软件 -> Options -> session options -> X/Y/Zmodem 下可以设置上传和下载的目录。

发表在 操作系统相关 | 标签为 , | 留下评论

压力测试工具siege的用法

Siege是Linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续请求的压力测试。

安装 Siege

Siege命令常用参数

-c 200 指定并发数200
-r 5 指定测试的次数5
-f urls.txt 制定url的文件
-i internet系统,随机发送url
-b 请求无需等待 delay=0
-t 5 持续测试5分钟
# -r和-t一般不同时使用

常用的siege命令举例

# 200个并发对http://www.google.com发送请求100次

# 在urls.txt中列出所有的网址

# 随机选取urls.txt中列出所有的网址

# delay=0,更准确的压力测试,而不是功能测试

# 指定http请求头 文档类型

Siege输出结果说明

Transactions: 总共测试次数
Availability: 成功次数百分比
Elapsed time: 总共耗时多少秒
Data transferred: 总共数据传输
Response time: 等到响应耗时
Transaction rate: 平均每秒处理请求数
Throughput: 吞吐率
Concurrency: 最高并发
Successful transactions: 成功的请求数
Failed transactions: 失败的请求数

Siege使用的一些总结

1,发送post请求时,url格式为:http://www.xxxx.com/ POST p1=v1&p2=v2
2,如果url中含有空格和中文,要先进行url编码,否则siege发送的请求url不准确

 

添加

siege -C 可以查看相关的配置参数,可以自行修改,比如是否显示log,超时时间

发表在 应用工具软件, 操作系统相关 | 标签为 , | 留下评论

Nginx泛解析的匹配域名绑定到子目录配置

网站的目录结构为:

/home/wwwroot/zzstudio.net为nginx的安装目录下默认的存放源代码的路径。

bbs为论坛程序源代码路径;www为主页程序源代码路径;把相应程序放入上面的路径通过;http://www.zzstudio.net 访问的就是主页http://bbs.zzstudio.net 访问的就是论坛,其它二级域名类推。

有2种方法,推荐方法一

方法一:

方法二:

 

发表在 应用工具软件 | 标签为 , | 留下评论

CentOS下MySQL 5.7编译安装

MySQL 5.7 GA版本的发布,也就是说从现在开始5.7已经可以在生产环境中使用,有任何问题官方都将立刻修复。

MySQL 5.7主要特性:

  • 更好的性能:对于多核CPU、固态硬盘、锁有着更好的优化,每秒100W QPS已不再是MySQL的追求,下个版本能否上200W QPS才是吾等用户更关心的
  • 更好的InnoDB存储引擎
  • 更为健壮的复制功能:复制带来了数据完全不丢失的方案,传统金融客户也可以选择使用MySQL数据库。此外,GTID在线平滑升级也变得可能
  • 更好的优化器:优化器代码重构的意义将在这个版本及以后的版本中带来巨大的改进,Oracle官方正在解决MySQL之前最大的难题
  • 原生JSON类型的支持
  • 更好的地理信息服务支持:InnoDB原生支持地理位置类型,支持GeoJSON,GeoHash特性
  • 新增sys库:以后这会是DBA访问最频繁的库

安装依赖包

下载相应源码包

添加mysql用户

预编译

编译安装

启动脚本,设置开机自启动

/etc/my.cnf,仅供参考

初始化数据库

注:

  1. 之前版本mysql_install_db是在mysql_basedir/script下,5.7放在了mysql_install_db/bin目录下,且已被废弃
  2. “–initialize”会生成一个随机密码(~/.mysql_secret),而”–initialize-insecure”不会生成密码
  3. –datadir目标目录下不能有数据文件

启动数据库

设置数据库密码

 

发表在 应用工具软件, 操作系统相关 | 标签为 , | 留下评论

使用socket方式连接Nginx优化php-fpm性能

Nginx连接fastcgi的方式有2种:TCP和unix domain socket

什么是Unix domain socket?—— 维基百科
Unix domain socket 或者 IPC socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。与管道相比,Unix domain sockets 既可以使用字节流和数据队列,而管道通信则只能通过字节流。Unix domain sockets的接口和Internet socket很像,但它不使用网络底层协议来通信。Unix domain socket 的功能是POSIX操作系统里的一种组件。

Unix domain sockets 使用系统文件的地址来作为自己的身份。它可以被系统进程引用。所以两个进程可以同时打开一个Unix domain sockets来进行通信。不过这种通信方式是发生在系统内核里而不会在网络里传播。

TCP和unix domain socket方式对比

TCP是使用TCP端口连接127.0.0.1:9000

Socket是使用unix domain socket连接套接字/dev/shm/php-cgi.sock(很多教程使用路径/tmp,而路径/dev/shm是个tmpfs,速度比磁盘快得多

测试机是个1核的centos5.4,2用户并发时系统资源消耗50%左右,10用户资源就跑得很满了。

2users 10users
nginx/1.2.9 + PHP 5.2.5 tcp 1060 1294
nginx/1.2.9 + PHP 5.2.5 socket 997 1487
nginx/1.2.9 + PHP 5.3.10 tcp 906 1082
nginx/1.2.9 + PHP 5.3.10 socket 880 1247

结论是在服务器压力不大的情况下,tcp和socket差别不大,但在压力比较满的时候,用套接字方式,效果确实比较好。

下面是php 5.3以上版本将TCP改成socket方式的配置方法:

修改php-fpm.conf(/usr/local/php/etc/php-fpm.conf)

修改listen.owner及listen.group信息为www

修改nginx配置文件server段的配置,将http的方式改为socket方式

重启php-fpm与nginx

可以看到php-cgi.sock文件unix套接字类型

参考:http://zh.wikipedia.org/wiki/Unix_domain_socket

发表在 操作系统相关 | 标签为 , , | 留下评论