• 每天进步一点点!

文章分类

推荐网站

常用手册

Apache Benchmark(ab)的简单实用【原创】

ab简介

    Apache Bachemark(ab)工具是最著名的基准测试工具之一,它是默认的Apache的安装的一部分,能给模拟对特定URL的任意数量的请求来对web服务器进行压力测试。ab工具提供以下信息:

  • 传输的总数据大小(以字节为单位)
  • web服务器在模拟流量下每秒可以支持的流量数。
  • 完成一个请求所花的最长时间(以毫秒为单位)
  • 完成一个请求所花的最短时间(以毫秒为单位)

 

使用ab工具还可以运行很多不同的负载模拟,例如:

  • 对web文档的模拟请求;
  • 制定时间内的请求;
  • 打开Keep-Alive时的请求

最重要的是,Apache Bachemark是独立于Apache Web服务器的,从而可以在运行ab的同时使运行此工具的计算机上的web服务器处于非活动状态。

 

 

ab命令的组成结构

 

ab [options] [full path to web document]

下面我们对我的博客用ab工具进行一下基准测试,熟悉一下ab的用法。

我们使用ab工具对模拟单个请求。

ab -n 1 www.05do.com/index

注意:如果你不请求该域中的任何文档,必须在域名后面加一个反斜杠。如:ab -n 1 www.05do.com/

类别:性能优化 | 浏览(136) | 评论(0) | 阅读全文>>

SSH SCP Rsync 通过认证方式连接服务器【原创】

有两台服务器,服务器A(10.10.252.158)和服务器B(10.10.252.178)。

现在想在服务器A上通过SSH连接服务器B,或通过SCP、Rsync向服务器B传输文件。但这三种情况下都需要用户提供服务器B的用户名和密码,有些情况下用户可能需要在服务器A上直接通过SCP或Rsync向服务器B上传输文件,而不方便输入服务器B的用户名或密码(比如在计划任务cron中),这是可以使用认证方式连接服务器B,具体方法如下。

 

(1)以root用户登录服务器A,在服务器A的终端上输入:

ssh-keygen -t rsa

 

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): (回车)

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase): (回车)

Enter same passphrase again: (回车)

 

这时在/root 目录下生成一个.ssh的文件夹,进入此文件夹,里面有两个文件:id_rsa  id_rsa.pub

 

(2)以root用户登录服务器B,将id_rsa.pub(公钥)文件拷贝到服务器B的/root/.ssh 目录下(如果没有这个目录则创建之)

scp 10.10.252.158:/root/.ssh/id_rsa.pub /root/.ssh/

 

(3)在服务器B上,将服务器A传输过来的 id_rsa.pub 重命名为 authorized_keys

mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

 

类别:Linux | 浏览(166) | 评论(0) | 阅读全文>>

php深复制和浅复制【原创】

先看一个电视类的代码:

class Television {  
    //电视机外观颜色
    protected $_color  = 'black';   
    
    //返回电视外观颜色 
    public function getColor() {   
        return $this->_color;   
    }   
    
    //设置电视机外观颜色
    public function setColor($color) {   
        $this->_color = $color;   
        return $this;   
    }   
}

 

这段代码定义了一个电视机的类 Television , $tv1为一个电视机的实例,然后我们按照普通的变量赋值方式将$tv1的值赋给$t2。那么现在我们拥有两台电视机$tv1和$tv2了,真的是这样的吗?我们来测试一下。

echo 'color of tv1 is: ' . $tv1->getColor();//tv1的颜色是black   
echo '
';   
echo 'color of tv2 is: ' . $tv2->getColor();//tv2的颜色是black   
echo '
';   
          
//把tv2涂成白色   
$tv2->setColor('white');   
echo '
';     
echo 'color of tv2 is: ' . $tv2->getColor();//tv2的颜色是white   
echo '
';   
echo 'color of tv1 is: ' . $tv1->getColor();//tv1的颜色是white
      
var_dump($tv1);
var_dump($tv2);
      
/********输出结果*******/
/*
object(Television)#1 (1) {
  ["_color":protected]=>
  string(5) "black"
}
object(Television)#1 (1) {
  ["_color":protected]=>
  string(5) "black"
}
*/
//可以看出$tv1和$tv2的对象id是相同的

首先我们看到tv1和tv2的颜色都是black,现在我们希望tv2换个颜色,所以我们将它的颜色设置成了white,我们再看看tv2的颜色,确实成为了white,似乎满足了我们的要求,可是并没有想象中的那么顺利,当我们接着看tv1的颜色的时候,我们发现tv1也由black边成了white。我们并没有重新设置tv1的颜色,为什么tv1会重black变成white呢?这是因为PHP5中对象的赋值和传值都是以“引用”的方式。PHP5使用了Zend引擎II,对象被储存于独立的结构Object Store中,而不像其它一般变量那样储存于Zval中(在PHP4中对象和一般变量一样存储于Zval)。在Zval中仅存储对象的指针而不是内容(value)。当我们复制一个对象或者将一个对象当作参数传递给一个函数时,我们不需要复制数据。仅仅保持相同的对象指针并由另一个zval通知现在这个特定的对象指向的Object Store。由于对象本身位于Object Store,我们对它所作的任何改变将影响到所有持有该对象指针的zval结构----表现在程序中就是目标对象的任何改变都会影响到源对象。.这使PHP对象看起来就像总是通过引用(reference)来传递。所以以上的tv2和tv1其实是指向同一个电视机实例,我们对tv1或对tv2所做的操作其实都是针对这同一个实例。因此我们的“复制”失败了。看来直接变量赋值的方式并不能拷贝对象,为此PHP5提供了一个专门用于复制对象的操作,也就是 clone 。这就是对象复制的由来。

类别:PHP | 浏览(109) | 评论(0) | 阅读全文>>

linux下修改IP地址【原创】

IP地址、子网掩码:

vim /etc/sysconfig/network-scripts/ifcfg-eth0

 

DEVICE=eth0

BOOTPROTO=static

ONBOOT=yes

HWADDR=00:0c:29:3e:cd:97 #硬件ID不可修改

NETMASK=255.255.255.0

IPADDR=10.10.252.178

NETWORK=10.10.252.0

 

 

网关:

vim  /etc/sysconfig/network

 

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=localhost.localdomain

GATEWAY=10.10.252.1

 

DNS:

vim /etc/resolv.conf

 

 

nameserver 219.232.48.61

nameserver 8.8.4.4

search localdomain

 

类别:Linux | 浏览(104) | 评论(0) | 阅读全文>>

JS日期和时间戳相互转换【原创】

今天遇到一个关于JS的日期和时间戳相互转换的问题,在网上找了许久略有发现,自己写了两个方法,记录一下。

 

/**
 * 返回给定时间部件的时间戳
 */
function dateToTimestamp(year, month, day, hours, minutes, seconds) {
	var date = new Date();
	year = year.length == 0 ? date.getFullYear() : year;
	month = month.length == 0 ? date.getMonth() + 1 : month + 1;
	day = day.length == 0 ? date.getDate() : day;
	hours = hours.length == 0 ? date.getHours() : hours;
	minutes = minutes.length == 0 ? date.getMinutes() : minutes;
	seconds = seconds.length == 0 ? date.getSeconds() : seconds;
	// console.log('year = ' + year + ' month = ' + month + ' day =' + day + ' hours = ' + hours + ' minutes=' + minutes + ' seconds = ' + seconds );
	return Date.UTC(year, month, day, hours, minutes, seconds) / 1000 - 3600 *  8
}

/**
 * 返回给定时间戳对应的日期格式
 */
function timestampToDate(timestamp, dateDelimiter, timeDelimiter) {
	var date = new Date();
	timestamp = timestamp == undefined ?  date.getTime() : timestamp;
	dateDelimiter = dateDelimiter == undefined ? '-' : dateDelimiter;
	timeDelimiter = timeDelimiter== undefined ?  ':' : timeDelimiter;
	
	var newDate = new Date(parseInt(timestamp) * 1000);
	var year = newDate.getFullYear();
	var month = newDate.getMonth() < 10 ? '0' + newDate.getMonth() : newDate.getMonth();
	var day = newDate.getDate() < 10 ? '0' + newDate.getDate() : newDate.getDate();
	var hours = newDate.getHours() < 10 ? '0' +newDate.getHours() : newDate.getHours();
	var minutes = newDate.getMinutes() < 10 ? '0' + newDate.getMinutes() : newDate.getMinutes();
	var seconds = newDate.getSeconds() < 10 ? '0' + newDate.getSeconds() : newDate.getSeconds();
	var fomateDateTime = year + ''+ dateDelimiter + '' + month + '' + dateDelimiter +''+ day + ' ' + hours + '' +  timeDelimiter + '' + minutes +'' + timeDelimiter + '' + seconds
	// console.log('fomateDateTime = ' +fomateDateTime);
	return fomateDateTime;
}

 

类别:JavaScript | 浏览(129) | 评论(0) | 阅读全文>>