hypnotoad workers参数对并发的影响

022016-11

使用mojo作为生产服务的时候可以使用mojo自带的hypnotoad服务,类似apache的workers模式,可以根据参数产生指定的进程来加大并发能力。

以下是ab测试为1 worker,4 works和8 works的并发情况。

服务器硬件环境:I5 6300U, 4核心,4G内存,运行在VM虚拟机上

服务器软件环境:CentOS 6.5 64位, Perl 5.24 64位

ab范例

ab -c 200 -n 10000 http://192.168.100.10:8080

服务端:一个查询和写入redis数据的功能

1 work:Requests per second: 68.74 [#/sec] (mean)

4 works:Requests per second: 202.60 [#/sec] (mean)

8 works:Requests per second: 420.37 [#/sec] (mean)

16 works:ab崩溃了一次,第二次测试降低到4 works都不如,同时有请求出错的情况。

对于mojo来说,如果你服务端用的不是异步的写法,那么多works可以帮你缓解并发的问题。

Movable type通过反向代理无法获取真实IP

212016-10

前端使用了NGINX反向代理,结果发现log里面的ip地址都是127.0.0.1,在网上找了一圈没找到结果,后来看了下源码,发现配置文件中有个 TransparentProxyIPs的变量,当这个设置为真的时候,就从X-Forwarded-For里面获取IP。 如下:

my $ip = $trusted ? $app->getheader(‘X-Forwarded-For’) : $remoteip;

官网的说明

  • If your webserver is behind an HTTP proxy, it will look as if all comments and trackback pings are coming from the same IP address, making it difficult (nay, impossible) to ban any particular sender’s IP address。

剩下的就很简单了,在mt-config.cgi中加入

TransparentProxyIPs 1

重启perl的相关服务,一切就OK了

perl生成二维码的方法

212016-10

因为有现成的模块,所以直接使用就可以了

#!/usr/bin/perl -w

use Imager::QRCode;
my $qrcode = Imager::QRCode->new(
size => 2,
margin => 2,
version => 1,
level => 'M',
casesensitive => 1,
lightcolor => Imager::Color->new(255, 255, 255),
darkcolor => Imager::Color->new(0, 0, 0),
);
my $img = $qrcode->plot("www.google.com");

$img->write(file => 'google.jpg', type=>'jpeg') or die $img->errstr;

升级到MT6

092016-10

很久以前本blog使用的是MT4的版本,正好更换了主机,借重装OS的机会,也把MT升级一下,结果发现MT已经开始收费了,网上找到了MT5的下载,却找不到最新的6,于是先升级到5,结果发现一堆问题,因为新的OS使用了是Perl5.24了,但从Perl5.16开始,有些语法就有了变化,具体点说在Perl5.16以前可以defined(@array)和defined(%hash)来判断是否存在的函数取消了,如果你使用了Perl5.24而出现类似Can't use 'defined(@array)' 这样的错误信息,那就说明你的程序写法太古老了。

后来发现MT6其实还是可以免费申请的,只要你接受它的授权条件就可以了,于是赶紧下载6,很顺利的升级了上去,而且在Perl5.24下工作的也很好,另外6可以直接使用PSGI,现在无论是执行速度还是写作时候的便利性都比4方便了很多。

如果你也还在用mt的话,不妨升级到6

windows下使用morbo来调试mojo

092016-10

mojo确实是perl下一个很强大的web框架,基本上涵盖你需要使用的大部分功能,不管是要使用fcgi模式还是cgi更或者是websocket都能很快的实现,

传统mojo的开发需要不停的关闭和重服务,这对开发来说是很不友好的。不管不用担心,mojo早就想到了这一点,跟nodejs下的geddy一样,mojo有个叫morbo的服务可以做自动加载重启的工作。而使用起来也很简单,如果你装好了mojo,那morbo也就自带了,你只需要执行

morbo yourapp.pl

当你修改过代码后,mojo就会自动帮你重新加载,你只需要把重心放在开发上就ok了。

但是在winodws上使用morbo而恰好你又使用了EV的话可能就会出现下面的情况

Server available at http://127.0.0.1:3000

EV does not work with ithreads.

这是因为EV是不支持线程的,具体愿意可以去看EV的文档。

这个时候也不用慌,只需要在你的用户的环境变量中设置一下

MOJO_REACTOR=Mojo::Reactor::Poll

是不是炒鸡煎蛋,

Ubuntu 14下降级mysql遇见的问题

162016-02

 通过apt-get安装了mysql5.6后发现,有个软件依赖的mysql版本为5.5,删除5.6之后装5.5出现

子进程 新的 pre-installation 脚本 返回了错误号 1

的问题。

折腾半天无果,最后参考http://www.cnblogs.com/xusir/p/3342722.html

sudo rm -rf /var/lib/mysql/ 
sudo rm -rf /etc/mysql/
sudo apt-get autoremove mysql* --purge   

总结就是降级的时候没有把以前的东西删除干净,所以把东西删除干净后在执行

sudo apt-get install mysql-server mysql-common

问题解决到此解决

简单的实现mongodb集群

042016-02

最近有个项目需求要用到mongodb集群和切片,网上有很多不错的文章,但对原理感兴趣的可以看下http://www.lanceyan.com/tech/arch/mongodb_shard1.htm 

本人以实战为主,以下是干货设置部分

以下操作只是在一台机器上做的,如果有多台机器则需要每台机器都按这样的步骤操作

首先要规划到数据库位置,我这里启用了一个mongos,2个配置服务器,3个数据库切片。

习惯上大家都是放在/data中,所以以下为创建所需目录的部分

mkdir -p /data/mongo/mongos/log

mkdir -p /data/mongo/config/data

mkdir -p /data/mongo/config/log

mkdir -p /data/mongo/config1/data

mkdir -p /data/mongo/config1/log

mkdir -p /data/mongo/shard1/data

mkdir -p /data/mongo/shard1/log

mkdir -p /data/mongo/shard2/data

mkdir -p /data/mongo/shard2/log

mkdir -p /data/mongo/shard3/data

mkdir -p /data/mongo/shard3/log

这样就创建好了我们所需要的目录。

 

 

按此阅读全文 " 简单的实现mongodb集群 " »

AnyMongo在高版本perl下的编译Bug

132016-01

在perl高于5.12版的时候编译会出现

mongo_support.c: In function 'elem_to_sv':
mongo_support.c:432:18: error: 'PMf_LOCALE' undeclared (first use in this function)
mongo_support.c:432:18: note: each undeclared identifier is reported only once for each function it appears in
dmake.exe:  Error code 129, while making 'mongo_support.o'
 
原因是perl5.12以后xs的方法有所变化,简单的做法就是编辑
mongo_support.c
 
找到
     flags |= PMf_LOCALE;

修改为
      #if PERL_REVISION==5 && PERL_VERSION>12
        set_regex_charset(flags, REGEX_LOCALE_CHARSET);
      #else
         flags |= PMf_LOCALE;
      #endif
在编译

安装ZMQ::LibZMQ4

252015-12

首先下载zeromq4

http://zeromq.org/intro:get-the-software

官方推荐2和3的用户升级到4
 
zeromq4依赖libsodium-devel,没有的话先安装该模块,剩下就是默认的安装方法。
 
安装好后开始ZMQ::LibZMQ4的安装。
先装好以下模块
Task::Weaken
Test::TCP
ZMQ::Constants
 
 
下载源码后,我懒得去设置pkg-config,所以只需按下面步骤即可
默认zmq的库文件是在/usr/local/lib里,在命令行里依次执行:
ZMQ_LIBS=/usr/local/lib \
perl Makefile.PL
make 
等编译完成后
make test
make install
即可。
 
以上操作在CentOS 6.7,  perl5.22下通过
 
 

LWP的HTTP请求突然不能用的问题

212015-04

前段时间用CPAN升级模块,突然发现怎么都下载不了模块了。

看错误信息里面,发现用LWP模块发送的GET请求回来的都是500的错误,但是通过浏览又是正常的,在往下看,有条如下的信息:

syswrite() on unopened filehandle at IO/Handle.pm

本着以为是IO::Handle的问题,但升级之后问题依旧,重装LWP也依然无效,后来Google之后发现又人也遇见过这样的问题,解决办法就是升级IO::Socket::INET6,后来才想起貌似有次安装模块的时候升级过IO::Socket模块,而IO::Socket::INET6又不是必须安装的,所以CPAN没有自动升级它,至此问题解决。

About

logo

my contact

2017年5月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

最新评论

归档

我的连接

Creative Commons License
此 Blog 中的日记遵循以下授权 Creative Commons(创作共用)授权.