KVM一些性能优化

注意,做dd测试的时候要先把原来的文件删除再测试,否则对测试的结果影响很大。

在缺省的配置情况下,KVM IO 的性能非常差,在没有调优的情况下写1G, 速度为 3M/s

dd if=/dev/zero of=/tmp/output.img bs=8k count=128000

修改磁盘的格式为preallocation

qemu-img create -f qcow2 -o preallocation=metadata test.qcow2 20G

如果是现有的磁盘,

qemu-img convert -f qcow2 -O qcow2 -o preallocation=metadata original.qcow2 converted.qcow2

修改disk cache配置 ...

more ...

在WINDOWS系统中如何映射文件夹到驱动盘

应用场景:

在一个项目组里面,我们check out了源代码之后,很可能都会放到各自的目录下面,再导入IDE进行 编码,构建,没有一个统一的路径,这样需要花费很多时间去修改配置文件中带有绝对路径的部分,所以 我们选择一个这个方案,东西可以放在自己的文件夹,但必须映射到统一个驱动盘符下面。

windows自带命令subst 可以完成mapping操作,但重启之后不再生效,所以每次都要在开机后自己 运行一次,所以有人开发了一个持久版的subst,是利用注册表实现的。 项目的网址 http://code.google.com/p/psubst/

我们把psubst下载到本地目录,解压后有psubst.bat,把此bat放到c:/windows目录下。

DOS 命令,带有/P 的是永久操作,重启后仍有效,不带的跟系统自带subst一样。

psubst 盘符号: 文件夹路径
psubst 盘符号: 文件夹路径 /P

例如

psubst m ...
more ...

Maven主要使用的命令

打包命令, 这里根据 <packaging>xxx</packaging> 的参数打包成jar或者war,ear

mvn package

执行jar中的某一个main

mvn install
mvn exec:java -Dexec.mainClass=com.xxx.SomeClass

查看依赖关系命令

mvn dependency:tree

启动jetty 服务器

mvn jetty:run

使用tomcat7作为maven启动web容器

再pom.xml中的build部分

<build>
    <finalName>yourFinalName</finalName>
    <plugins>
        <plugin>
            <groupId>com.googlecode.t7mp</groupId>
            <artifactId>maven-t7-plugin</artifactId>
            <version>0.9.8 ...
more ...

在Ubuntu 下搭建moinmoin环境

环境

  • Ubuntu: 10.04.04
  • Python: 2.7.3
  • Ngnix: 1.2.6
  • virtualenv: 1.8.4

首先我们安装的用户必须在admin组

moinmoin运行在virtualenv 环境下面,所以先创建virtualenv

sudo mkdir /opt/moinmoin
chown root:admin /opt/moinmoin
cd /opt/moinmoin
virtualenv env
pip install uwsgi

然后在moin会在/opt/moin/env/share/moin中会创建以下文件夹

|-  config
|-  data
|-  server
|-  underlay

运行一下命令

cd ...
more ...

Nginx正向代理设置

应用场景:

有时候,我们局域网中的服务器是不允许直接连到公网上面的, 所以要升级服务器或者安装软件的时候需要通过一个代理才能连接公网。

这里我们介绍怎么配置Nginx作为正向代理。 注意,此代理不支持https协议。

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    limit_conn_zone $binary_remote_addr zone=perip:10m;

    server {
        resolver 202.106.0.20;
        resolver_timeout 5s;
        listen       8088;

        limit_conn perip 10;
        limit_rate 20k;

        location / {
            proxy_pass $scheme://$host ...
more ...

Nginx安全加固

隐藏nginx的版本信息

如果版本信息直接跟在response中,攻击者就可以直接针对此版本的漏洞进行攻击

编辑/etc/nginx/nginx.conf, 在http段中添加

server_tokens off;

屏蔽某些IP

conf文件中http或server段添加

location / {
    ......
    allow 10.0.0.0/8;
    deny all;
}

禁止搜索机器人

编辑robots.txt文件, 内容如下

User-agent: *
Disallow: /

Nginx.conf设置

location = /robots.txt {
    alias /the_folder_of_robots_txt_file/robots.txt;
    add_header Cache-Control public;
    expires 30d;
    access_log off;
}

Nginx禁止自动跳转

比如说,folowing.com下面有几个子域名

  • www.folowing ...
more ...

Nginx Star SSL

StarSSL是免费的好用的认证,但最新的firefox对其颁发的证书不能直接认证, 必须使用chain.

ssl  on;
ssl_certificate  /etc/nginx/ssl/security.crt;
ssl_certificate_key  /etc/nginx/ssl/security.key;

使用以下命令后,nginx就可以chain了

curl http://www.startssl.com/certs/sub.class1.server.ca.pem >>security.crt
curl http://www.startssl.com/certs/ca.pem >>security.crt
more ...

PostgreSQL

备份和恢复

Postgres 备份数据库会将数据库中所有数据导出形成一个 xxx.sql, 恢复时直接执行sql创建数据到数据库中。

备份:

pg_dump -U USER_NAME -p PORT -h SERVER_IP -W DB_NAME | gzip > backup.gz

恢复:

gunzip -c backup.gz | psql NEW_DB

安全策略

绝对不用在shell中对postgres用户进行passwd操作, 因为UNIX 用户 "postgres" 是被锁定的,这意味这不能使用password来登陆此用户, 一旦使用 passwd postgres命令设置了密码,postgres用户就会被解除锁定

postgresql有默认的db管理员用户,名字也叫postgres,我们应该修改的是这个密码

sudo -u postgres psql postgres
# \password postgres
Enter new ...
more ...

Python设置默认Encoding

当python中间处理非ASCII编码时,经常会出现如下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)

0x??是超出128的数字,python在默认的情况下认为语言的编码是ascii编码,所以无法处理其他编码,需要设置python的默认编码为所需要的编码。

解决的方案1

import sys

reload(sys)
sys.setdefaultencoding('utf-8')

解决的方案2

另一个方案是在python的Lib\site-packages文件夹下新建一个sitecustomize.py 文件, 内容如下

import sys
sys.setdefaultencoding('utf-8')

这样就能够自动的设置编码了。

测试已经成功的方法

>>> import sys
>>> sys.getdefaultencoding()
more ...

如何在 Python中使用namespace

如果想要在python中使用好像java一样的namespace, 又想发布到不一样的egg下面,就必须按以下修改

Package-1/example/__init__.py
Package-1/example/module1/__init__.py
Package-1/setup.py
Package-2/example/__init__.py
Package-2/example/module2/__init__.py
Package-2/setup.py

Package-1/setup.py内容

from setuptools import setup, find_packages
import sys
setup(name='example-a',
      version='1.0',
      include_package_data=True,
      )

Package-2/setup.py内容

from setuptools ...
more ...