10月 25

阿里云主机 yum 工具报错处理

试用了阿里云主机系统版本:Centos6.2 x64

安装gcc报错:

# yum install gcc

Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates)
Requires: kernel-headers
Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates)
Requires: kernel-headers >= 2.2.1
You could try using –skip-broken to work around the problem
** Found 1 pre-existing rpmdb problem(s), ‘yum check’ output follows:
kernel-2.6.32-220.13.1.el6.x86_64 has missing requires of kernel-firmware >= (‘0’, ‘2.6.32’, ‘220.13.1.el6’)

解决方法:

# vim /etc/yum.conf 注释
“#exclude=kernel*”

去除检查安装软的依赖

开始安装

# yum clean all

# yum install gcc -y

10月 09

tomcat性能监控工具psi probe

PSI PROBE配置简单,很多人在写。我个人做个简单记录。
下载地址
http://code.google.com/p/psi-probe/downloads/list

上传war包,tomcat自动解包,修改完配置不用重启就可以生效。
配置conf/tomcat-users.xml

  
  
   
  
  
  
  
  

通过浏览器查看监控页面。
如果要查看System Information,需要在catalina.sh中加入如下语句:
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote”

8月 16

go 操作redis ,对比python 操作redis

  之前做过python入库到redis的测试 http://www.simonzhang.net/?p=430
  今天才发现由于页面生成问题,有部分代码被转译了。借这个机会在同一台机器上再测试一下这两种语言。

  测试服务器为一个Xeon(TM)双核3.20GHz 的cpu,内存4G。操作系统为Centos5.4 64位。go1.0.2,python2.6

  go环境和redis之前已经有记录,go语言的redis开发包安装也比较简单,但是官方文档中目录有写错。
  我的go放在/usr/local/go,我的安装记录如下:
cd /usr/local/go/src/pkg
git clone git://github.com/alphazero/Go-Redis.git redis
cd redis
go install

仍旧用大密码表实验,go语言代码如下:

//www.simonzhang.net
package main 

import (
	"os";
	"log";
	"fmt";
	"redis";
        "encoding/hex"
        "crypto/md5"
)

func main () {
	spec := redis.DefaultSpec().Db(1).Password("");
        //如要操作远程redis服务器连接如下
	//spec := redis.DefaultSpec().Host("192.168.1.200").Db(1).Password("123");
	client, e := redis.NewSynchClientWithSpec (spec);
	if e != nil { log.Println ("failed to create the client", e); return }
        var str string
        userFile := "big_pass.txt"
        fin,err := os.Open(userFile)
        defer fin.Close()
        if err != nil {
                fmt.Println(userFile,err)
                return
        }
        buf := make([]byte, 1)
        for{
                n,_:= fin.Read(buf)
                if 0==n {break}
                if string(buf)=="\n"{
	            h:= md5.New()
   	            h.Write([]byte(str))
                    key:=hex.EncodeToString(h.Sum(nil));
                    value:=[]byte(str)
                    client.Set(key, value);
                    str=""
                 }else{
                    str+=string(buf)
                 }
                  
        }
}

开始测试

go使用build编译运行,cpu使用率在55%左右,load average: 1.98, 1.22, 0.91
real 1m33.310s
user 0m42.586s
sys 0m34.567s

python cpu使用在在80%,load average: 2.19, 1.36, 0.86。
real 1m26.873s
user 0m56.316s
sys 0m19.595s

  总结python写redis的东西比较简单。go对字符串做了MD5,入redis时用MD5值做key。
a)都运行完毕python和go录入redis行数与文本行数相同。
b)从大小来看python不到1K,go编译完成2.3M。如果要一处编译,移到其他服务器运行,go编译完的可以直接运行,python还要再装环境。但是有easy_install,所以装环境对我来说比较简单。
c) cpu使用量来看go要比python好一些,在增加md5计算的情况下所用系统资源也比pyhton少,但是应该快不了一倍。
d) 从代码编写的逻辑和难易程度来看,还是python简单一点。
如果要考虑速度可以试试Cpython,我没有试过。

7月 05

获得访问IP地址的jsp

IPTest.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
try {
	String ipAddress = request.getHeader("X-FORWARDED-FOR");
	if(ipAddress == null) {
		ipAddress = request.getRemoteAddr();
	}
	out.println(ipAddress);
} catch (Exception e) {
	e.printStackTrace();
}
%>


  
    
    My JSP 'IPTest.jsp' starting page