ab简介
Apache Bachemark(ab)工具是最著名的基准测试工具之一,它是默认的Apache的安装的一部分,能给模拟对特定URL的任意数量的请求来对web服务器进行压力测试。ab工具提供以下信息:
使用ab工具还可以运行很多不同的负载模拟,例如:
最重要的是,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/
有两台服务器,服务器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
先看一个电视类的代码:
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 。这就是对象复制的由来。
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
今天遇到一个关于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; }