在vim中粘贴代码时缩进混乱问题

[iframe frameborder=”no” border=”0″ marginwidth=”0″ marginheight=”0″ width=520 height=86 src=”http://music.163.com/outchain/player?type=2&id=28481105&auto=1&height=66″][/iframe]

vim_keyboard有时我们将代码在wim的插入模式下粘贴时,会出现缩进与原来的代码不一致的问题,这会造成向python这类以缩进识别代码的语言无法运行,手动改起来十分麻烦,在网上查了下资料,可以在底行模式下使用如下命令再粘贴:

[code lang=”bash”]set paste[/code]

若觉得太麻烦的话也可以设置键盘映射,map <F10> :set paste<CR> :map <F11> :set nopaste<CR>

这样在粘贴前按F10键启动paste模式,粘贴后按F11取消paste模式即可。其实,paste有一个切换paste开关的选项,这就是pastetoggle。通过它可以绑定快捷键来激活/取消 paste模式。比如::
:set pastetoggle=<F11>

这样减少了一个快捷键的占用,使用起来也更方便一些。但,这是最方便的吗?Vimer们对高效的追求永无止境。还有其他更好地方法吗?你可能想到了,vim寄存器。对,使用vim寄存器 “+p 粘贴即可。根本不用考虑是否自动缩进,是否paste模式,直接原文传递!:”+p”.

vim

Linux下Web网站压力测试工具

一个网站或者博客到底能够承受多大的用户访问量经常是我们在用VPS或者独立服务器搭建网站了最关心的问题,还有不少人喜欢对LNMP或者LAMP进行一些优化以便提高Web性能,而优化后到底有多大的效果,就需要我们对网站进行服务器压力测试了。

目前来说Webbench,Apache Bench,http_load是三款比较流行的网站服务器压力Web性能测试工具,安装和使用都非常简单,只要有一台VPS主机或者直接用本地电脑就可以开始测试,由于受网络等各种因素的影响,测试结果不一定很准确,但可以当作参考.

Apache Bench又叫做AB,是Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark testing,ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问,可用来测试Apache的负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。

Webbench是由Lionbridge公司开发出来的一个网站压力测试工具,可用于测试ASP,PHP,JAVA,CGI等服务器压力,也可用于SSL的安全网站的负载能力进行测试,最多可以模拟3万个并发连接去测试网站的负载能力,Webbench操作简单,一行命令就可以显示出服务器压力。

http_load这是国外一个博主开发的基于linux平台的性能测试工具,主要是以并行复用的方式运行,可以用来测试web服务器的吞吐量与负载,测试结果一目了然。Apache Bench,Webbench,http_load这三款网站服务器压力测试工具还要根据测试者的主机性能来决定参数,防止把测试主机给搞成死机了。

一、Apache Bench:Apache自带服务器压力测试工具

1、要使用Apache Bench工具,只要VPS主机已经有了Apache就行了,如果安装Apache,可直接运行命令:yum install httpd。

2、Apache Bench工具用法命令:ab -n 100 -c 50 https://www.qq.com/,“-n”表示:每次请求数,默认不能超过1024个,“-c”表示:1个请求的并发连接数,默认最大不能超过50000。注意C

3、上面的命令就是模拟50个并发连接每次以100个请求数来测试腾讯网站的Web性能。测试结果及相关的数据说明请看下图:

二、Webbench:最多模拟3万个并发连接数测试压力

安装依赖:yum install ctags wget make apr* autoconf automake gcc gcc-c++

安装:wget http://home.tiscali.cz/cz210552/distfiles/webbench-1.5.tar.gz

tar zxvf webbench-1.5.tar.gz  #解压

cd webbench-1.5  #进入解压目录

make  #编译

mkdir /usr/local/man #创建目录,否则安装失败

make install  #安装

用法:webbench -c 并发数 -t 运行测试时间 URL

压力测试:

[code lang=”bash”]webbench -c 1000 -t 30 http://www.baidu.com/
[/code]

 

-c是并发数 -t是持续时间,即30秒钟内中以每次1000个并发请求进行测试。

关于PHP服务缓存及优化

生产环境插件的安装建议:
1)对于功能性插件,如果业务产品不需要,可以展示不考虑安装,如imagick,PDO_MYSQL.
2)对于性能优化插件,eAccelerator、XCache、ZendOpcache(官方缓存插件)、APC可以选择安装其中任意一种,具体情况看实际业务需求,在选择时最好能搭建相关环境进行压力测试。

phpize是什么?

安装php扩展插件时,常常会有这样一条命令:/application/php/bin/phpize,它究竟起了什么作用呢?事实上phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块。比如想在编译好的PHP中加入Memcached等扩展模块,可使用phpize工具。

那么要如何使用phpize呢?

编译PHP后,其bin目录下会有phpize这个脚本文件。在编译要添加的扩展模块之前,执行一下phpize就可以了。比如现在想在PHP中加入memcached扩展模块,那么要做的只是执行如下的Memcache客户端软件安装命令:

[code lang=”bash”]

cd /home/jian/tools

wget -q http://pecl.php.net/get/memcache-2.2.7.tgz

tar -zxvf memcache-2.2.7.tgz

cd memcache-2.2.7

/application/php/lib/phpize

#在执行configure前执行这条命令

./configure –enable-memcache –with-php-config=/application/php/bin/php-config

make

make install

[/code]

这样就编译完成了,还需要做的就是在php.ini文件中加入如下两行:

[code lang=”bash”]

extension_dir="/application/php/lib/php/extensions/no-debug-non-zts-xxxxxxxx/"

extension = memcache.so

#上述两行配置的作用是加载使得Memcached客户端配置生效

#重启php

pkill php-fpm

/application/php/sbin/php-fpm

[/code]

 

使用python创建一个生成随机整数组成的网格程序

2016-06-24 11-43-12屏幕截图
python经常被用于生成测试数据,下面我们将创建一个生成随机数组成的网格的程序,用户可以规定需要多少行、多少列,以及所在的区域。
[code lang=”python”]
###########################################################
# File Name: generate_grid.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年06月24日 星期五 09时02分04秒
##########################################################
#!/bin/python
import random
def get_int(msg,minimum,default):
while True:
try:
line = input(msg)
if not line and default is not None:
return default
i = int(line)
if i < minimum:
print("must be >=",minimum)
else:
return i
except ValueError as err:
print(err)
#函数返回值:default或者有效的整数(由msg传递)
#函数功能:取得符合要求的整数

#取得行数、列数、以及用户需要的最小随机数值,其中row和column没有指定默认值,用户必须输入一个整数
rows = get_int("row:",1,None)
columns = get_int("columns:",1,None)
minimum = get_int("minimum(or Enter for 0):",-1000000,0)
#minimum的默认值为0,maximum的默认值为1000

default = 1000
if default < minimum:
default = 2 * minimum
maximum = get_int("maximum (or Enter for "+ str(default) + "):",minimum,default)

#随机数生成过程
row = 0
while row < rows:
line = ""
column = 0
while column < columns:
#调用random模块,生成指定范围的随机数
i = random.randint(minimum,maximum)
s = str(i)
while len(s) < 10:
#使每个数字都只用10个字符的字符串表示
s =" " + s
line +=s
column += 1
print(line)
row += 1

[/code]

用python3写一个小程序

学习了python的8大要素之后,我们来写一个小程序把:执行的效果如图2016-06-23 23-13-34屏幕截图

以下是源代码:

[code lang=”python”]
###########################################################
# File Name: bigdigits.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年06月23日 星期四 19时16分29秒
##########################################################
#!/bin/python3
import sys
Zero =["******",
"* *",
"* *",
"* *",
"* *",
"* *",
"******"]
One =[" * ",
"** ",
" * ",
" * ",
" * ",
" * ",
"***"]
Two =[" *** ",
"* *",
"* * ",
" * ",
" * ",
"* ",
"*****"]
Three=["******",
" *",
" *",
"******",
" *",
" *",
"******"]
Four=[" * ",
" ** ",
" * * ",
" * * ",
"******",
" * ",
" * "]
Five=["*****",
"* ",
"* ",
"*****",
" *",
" *",
"*****"]
Six=["******",
"* ",
"* ",
"******",
"* *",
"* *",
"******"]
Seven=["******",
" *",
" * ",
" * ",
" * ",
" * ",
"* "]
Eight=["******",
"* *",
"* *",
"******",
"* *",
"* *",
"******"]
Nine=["******",
"* *",
"* *",
"******",
" *",
" *",
"******"]
#每个数字本身又是一个列表
Digits=[Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine]
try:
digits=sys.argv[1]
print(digits)
row =0
while row <7:
line = ""
column = 0
while column < len(digits):
number = int(digits[column])
digit = Digits[number]
line += digit[row] + " "
column += 1
#内循环拼接每个数的第一行像素到变量line中,每次添加空格,然后逐行打印,直至7行
print(line)
row +=1
except IndexError:
print("usag:bigdigits.py <number> ")
except ValueError as err:
print(err,"in",digits)

[/code]

MemCache缓存软件解读

Memcache缓存软件说明

[iframe frameborder=”no” border=”0″ marginwidth=”0″ marginheight=”0″ width=600 height=86 src=”http://music.163.com/outchain/player?type=2&id=22551663&auto=0&height=66″][/iframe]

memcached

MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。

另外,说一下MemCache和MemCached的区别:

1、MemCache是项目的名称

2、MemCached是MemCache服务器端可以执行文件的名称

MemCache的官方网站为http://memcached.org/

Memcached服务的工作步骤如下:

  1. 程序首先检查客户端请求的数据在Memcached服务中的缓存中是否存在,如果存在,直接把请求的数据返回,不再请求后端数据库。
  2. 如果请求的数据在Memcached缓存中不存在,则程序会去Memcached后端的数据库服务。
  3. 把从数据库中取到的数据返回给客户端。
  4. 同时把新取到的数据库的数据缓存一份到Memcached服务缓存中,下次同样的请求就直接从Memcached服务缓存返回数据,从而减轻数据库的访问压力。

Memcached缓存PHP扩展插件安装

Memcache分为服务器端软件和客户端插件两部分,本文是Memcached客户端PHP的扩展插件(memcached-2.2.7.tgz)在php环境中的安装,用于访问Memcached服务器端数据。

PHP的Memcached扩展插件的下载地址为:http://pecl.php.net/get/memcache-2.2.7.tgz。

安装过程如下:

[code lang=”bash”]

cd /home/jian/tools/

wget http://pecl.php.net/get/memcache-2.2.7.tgz

tar -zxvf memcache-2.2.7.tgz

cd memcache-2.2.7/

/application/php/bin/phpize

./configure –enable-memcache –with-php-config=/application/php/bin/php-config

make

make install

ls -l /application/php/lib/php/extensions/no-debug-non-zts-20090626/

#若该文件夹下生成了memcache.so模块,表示memcache扩展插件成功安装

[/code]

memcached缓存应用:

 

 

 

 

 

 

 

memcached分布式原理

memcached不相互通信,那么memcached是如何实现分布式的呢?memcached的分布式实现主要依赖客户端的实现:

如上图所示,我们看下缓存的存储的一般流程:

当数据到达客户端,客户端实现的算法就会根据“键”来决定保存的memcached服务器,服务器选定后,命令他保存数据。取的时候也一样,客户端根据“键”选择服务器,使用保存时候的相同算法就能保证选中和存的时候相同的服务器。

 

Python的8个关键要素

一张图介绍python

要素1:数据类型

要素2:对象引用

要素3:组合数据类型

要素4:逻辑操作符

  • 身份操作符
  • 比较操作符
  • 成员操作符
  • 逻辑运算符:and、or与not

要素5: 控制流语句

在Python中,一块代码,也就是说一条或多条语句组成的序列,称为suite.由于Python中的某些语法要求存在一个suite,Python就提供了关键字pass,pass实际上是一条空语句,不进行任何操作。

  • if语句
  • while语句
  • for…in语句
  • 基本的异常处理

使用try和except语句来捕获异常

try:
block
except [exception,[data…]]:
block

try:
block
except [exception,[data…]]:
block
else:
block

该种异常处理语法的规则是:

·   执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。

·   如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。

·   如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。

·   如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

·   如果没有发生异常,则执行else块代码。

要素6:算数运算符

  • 基本四则数学运算符
  • 增强赋值操作符

要素7:输入/输出

code:

 

[sourcecode autolinks=”false” language=”python”]
###########################################################
# File Name: input.py
# Author:Zhixiang
# mail:zhixiang_uestc@126.com
# Created Time:2016年06月22日 星期三 21时13分06秒
##########################################################
#!/bin/python3
print("Type integers,each followed by Enter;or just Enter to finish")
total = 0;
count = 0;
while True:
line = input("integer:")
if line:
try:
number = int(line)
except ValueError as err:
print(err)
continue
total += number
count += 1
else:
break
if count:
print("count=",count,"total=",total,"mean=",total/count)
[/sourcecode]

注意: 与大多数其他程序设计语言不同的是,Python使用缩排来标识其块结构。由于suite是使用缩排指明的,
因此很自然地带来一个问题是:使用哪种缩排?Python风格指南建议的是每层缩排4个空格,并且只有空格 没有制表符。

在使用vim编辑Python代码时可以在vimrc中加入如下参数,设置tab键=4个空格:

[code lang=”bash”]

set ts=4
set expandtab

[/code]

要素8:函数的创建与调用

 

 

PHP.ini 配置文件的重要参数优化参考

opensource

1  、比较重要的安全参数优化如下:

第338行设置为safe_mode = On               #开启安全模式

第435行设置为expose_php = Off             #关闭版本信息

第538行设置为display_errors = Off          #错误信息控制,测试的时候开启

第 521 行默认为 error_reporting = E_ALL & ~E_DEPRECATED #报错的级别

第559行设置为log_errors = On                    #打开log曰志

第 643 行设置为 error_log = /app/logs/php_errors.log     #log 日志得路径(需 log_errors 为 On 才能生效)

第703行设置为register_globals = Off                   #关闭全局变量(默认即为关闭,万万不能开启)

第756行设置为magic_quotes_gpc = On              #防止SQL注入

第902行设置为allow_url_fopen = Off                 #打开远程打开(禁止)

第854行设置为cgi.fix_pathinfo=0                        #防止Nginx文件类型错误解析漏洞

2、更具具体业务可修改的参数如下:

第444行  max_execution_time = 30            #单个脚本最大运行时间,单位是秒

第454行  max_input_time = 60                    #单个脚本等待输入的最长时间

第 465行  memory_limit = 128M                  #单个脚本最大使用内存,单位为K或M(128M稍大可以适当调小)

第891行    upload_max_filesize = 2M          #上传文件最大许可

第894行    max_file_upload = 20                  #可以通过单个请求上载的最大文件数

注:第一列数字为默认 php.ini 文件相关参数对应的行号。