文章列表
 
2012-01-04 13:27


user  www;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

upstream lianlian_user{
        server 192.168.100.2;
}

upstream lianlian_static{
        server 192.168.100.4;
}

#注意这里是HTTP 访问自动转到https

 server {
        listen       80;
        server_name  passport.lsmart.cn localhost;
        rewrite ^(.*) permanent;


    }

 server {
        listen       80;
        server_name  static.lsmart.cn ;
        rewrite ^(.*) permanent;

    }

 


    # HTTPS server
    #证书 在conf 目录下  配置如下 方可访问
    server {
        listen       443;
        server_name   passport.lsmart.cn;

        ssl                  on;
        ssl_certificate      mycert.cer;
        ssl_certificate_key  server.key;

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;
        location / {
            proxy_set_header  cookie $http_cookie;
            proxy_pass http://lianlian_user;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            root   html;
            index  index.html index.htm;
        }
    }


    server {
        listen       443;
        server_name   static.lsmart.cn;

        ssl                  on;
        ssl_certificate      lsmart.cer;
        ssl_certificate_key  lsmart.key;

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;
        location / {
            proxy_set_header  cookie $http_cookie;
            proxy_pass http://lianlian_static;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            root   html;
            index  index.html index.htm;
        }
    }


}

 
2011-11-29 18:07

 

yum check-update  检查可更新的所有软件包
yum update  下载更新系统已安装的所有软件包
yum upgrade  大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级
yum install <packages>  安装新软件包
yum update <packages>  更新指定的软件包
yum remove <packages>  卸载指定的软件包
yum groupinstall <groupnames>  安装指定软件组中的软件包
yum groupupdate <groupnames>  更新指定软件组中的软件包
yum groupremove <groupnames>  卸载指定软件组中的软件包
yum grouplist  查看系统中已经安装的和可用的软件组
yum list  列出资源库中所有可以安装或更新以及已经安装的rpm包
yum list <regex>  列出资源库中与正则表达式匹配的可以安装或更新以及已经安装的rpm包
yum list available  列出资源库中所有可以安装的rpm包
yum list available <regex>  列出资源库中与正则表达式匹配的所有可以安装的rpm包
yum list updates  列出资源库中所有可以更新的rpm包
yum list updates <regex>  列出资源库中与正则表达式匹配的所有可以更新的rpm包
yum list installed  列出资源库中所有已经安装的rpm包
yum list installed <regex>  列出资源库中与正则表达式匹配的所有已经安装的rpm包
yum list extras  列出已经安装的但是不包含在资源库中的rpm包
yum list extras <regex>  列出与正则表达式匹配的已经安装的但是不包含在资源库中的rpm包
yum list recent  列出最近被添加到资源库中的软件包
yum search <regex>  检测所有可用的软件的名称、描述、概述和已列出的维护者,查找与正则表达式匹配的值
yum provides <regex>  检测软件包中包含的文件以及软件提供的功能,查找与正则表达式匹配的值
yum clean headers  清除缓存中的rpm头文件
yum clean packages  清除缓存中rpm包文件
yum clean all  清除缓存中的rpm头文件和包文件
yum deplist <packages>  显示软件包的依赖信息
当第一次使用yum 或yum 资源库有更新时,yum 会自动下载所有所需的he ade rs放置于 /var/cache /yum 目录下,所需时间可能较长。
还可以使用 yum info 命令列出包信息,yum info 可用的参数与 yum list 的相同。
yum 命令还可以使用 -y 参数用于用 ye s 回答命令运行时所提出的问题,比如 yum -y install vsftpd,这样在安装软件的时候就不用输入yes/y了

yum 命令工具使用举例

1、升级系统
[root@localhost ~]#yum update

2、安装指定的软件包,我最喜欢用下面的命令
[root@localhost ~]# yum -y install vsftpd

3、升级指定的软件包
[root@localhost ~]# yum -y update mysql

4、卸载指定的软件包
[root@localhost ~]# yum -y remore vsftpd mysql

5、查看系统中已经安装的和可用的软件组,对于可用的软件组,你可以选择安装
[root@localhost ~]# yum grouplist

6、安装上一个命令中显示的可用的软件组中的一个软件组,神之编辑器-Emacs,大约安装了12个软件包
[root@localhost ~]# yum -y groupinstall Emacs

7、更新指定软件组中的软件包
[root@localhost ~]# yum -y groupupdate Emacs

8、卸载指定软件组中的软件包,对于Emacs,安装的时候安装了12个软件包,但是卸载的时候只卸载了4个软件包!
[root@localhost ~]# yum -y groupremove Emacs

9、清除缓存中的rpm 头文件和包文件
[root@localhost ~]# yum clean all

10、搜索相关的软件包
[root@localhost ~]# yum -y search Emacs

11、显示指定软件包的信息
[root@localhost ~]# yum info Emacs
和rpm -qi emacs显示的信息差不多,但不完全相同

12、查询指定软件包的依赖信息,emacs依赖的模块不少啊
[root@localhost ~]# yum deplist emacs

13、列出所有以 yum 开头的软件包
[root@localhost ~]# yum list yum\*

14、列出已经安装的但是不包含在资源库中的rpm 包
# yum list extras

最常用的还是第3,4命令

 
2011-07-02 19:18

<html>
<a  onclick="test()" lang="test跨域">test跨域</a>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function test(){
jQuery.ajax({
                type: "get",
                url: "http://127.0.0.1/lianlian_biz/test/tt.html",
                dataType: "jsonp",
                jsonp: "callback"
                
            }); 

}
function callback(msg){
     alert("value1:" + msg.success);     
  }

//服务端返回代码

  //server代码 callback({symbol:'IBM', price:120,success:'ok'});
</script>

</html>

 
2011-03-24 22:05

<?xml version="1.0" encoding="UTF-8" ?>

 

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"

   "http://ibatis.apache.org/dtd/sql-map-2.dtd">

 

<sqlMap>

 

<!--动态查询1-->

<select id="getOrders1" parameterClass="com.air.Account"

resultClass="com.air.Product">

SELECT 

orders.id as id, 

orders.product as product,

orders.customer as customer 

FROM orders

<dynamic prepend=" WHERE ">

<isNull property="username">customer IS NOT NULL</isNull>

<isNotNull property="username">

orders.customer=#username#

</isNotNull>

</dynamic>

</select>

 

<!--动态查询2-->

<select id="getOrders2" parameterClass="com.air.Account"

resultClass="com.air.Product">

SELECT 

o.id as id, 

o.product as product,

o.customer as customer

FROM orders o 

<isNotNull property="username">

INNER JOIN user_account a ON o.customer=a.username 

</isNotNull>

<dynamic prepend="where ">

<isNotEmpty property="groupname" prepend="and "  open="(" close=")">

a.groupname=#groupname#

</isNotEmpty>

</dynamic>

</select>

 

<!--动态查询3-->

<select id="getOrders3" parameterClass="com.air.Product"

resultClass="com.air.Product">

SELECT 

orders.id as id, 

orders.product as product,

orders.customer as customer 

FROM orders 

<dynamic prepend="WHERE ">

<isNotEmpty property="product" prepend="and" open="(" close=")" >

product=#product#

</isNotEmpty>

<isNotEmpty property="customer" prepend="and"  open="(" close=")">

customer=#customer#

</isNotEmpty>

</dynamic>

</select>

<!--动态查询4-->

<select id="getOrders4" parameterClass="com.air.Product"

resultClass="com.air.Product">

SELECT 

*

FROM orders 

<dynamic prepend="WHERE  ">

<iterate property="keywords"  open="(" close=")" conjunction="OR"> 

product=#keywords[]#

</iterate>

</dynamic>

<!--<dynamic prepend="WHERE product IN  ">-->

<!--<iterate property="keywords"  open="(" close=")" conjunction=","> -->

<!--#keywords[]#-->

<!--</iterate>-->

<!--</dynamic>-->

</select>

</sqlMap>

 
2011-03-24 22:03

<?xml version="1.0" encoding="UTF-8" ?>

 

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"

   "http://ibatis.apache.org/dtd/sql-map-2.dtd">

 

<sqlMap>

 

<select id="getAllUsers" resultClass="com.air.Account">

SELECT * FROM USER_ACCOUNT order by USERID 

</select>

 

 

<!--无映射  -->

<select id="getAllUsers1" resultClass="com.air.Account"

parameterClass="string">

SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName#

</select>

 

<!--内联映射->实体类-->

<select id="getAllUsers2" resultClass="com.air.Account"

parameterClass="string">

SELECT USERID as userid, USERNAME as username, PASSWORD as

password, GROUPNAME as groupname FROM USER_ACCOUNT WHERE

GROUPNAME=#groupName#

</select>

 

<!--内联映射->MAP类-->

<select id="getAllUsers3" resultClass="hashmap"

parameterClass="string">

SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName#

</select>

 

<!--显示映射->实体类-->

<resultMap id="accoutResult" class="com.air.Account">

<result property="userid" column="USERID" />

<result property="username" column="USERNAME" />

<result property="password" column="PASSWORD" />

<result property="groupname" column="GROUPNAME" />

</resultMap>

<select id="getAllUsers4" resultMap="accoutResult"

parameterClass="string">

SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName#

</select>

 

<!--显示映射->MAP类-->

<resultMap id="mapResult" class="hashmap">

<result property="userid" column="USERID" />

<result property="username" column="USERNAME" />

<result property="password" column="PASSWORD" />

<result property="groupname" column="GROUPNAME" />

</resultMap>

<select id="getAllUsers5" resultMap="mapResult"

parameterClass="string">

SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName#

</select>

 

<!--XML-->

<select id="selectXML" parameterClass="string" resultClass="xml"

xmlResultName="log">

SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName#

</select>

 

<select id="getOneUser" resultClass="com.air.Account"

parameterClass="string">

SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName#

</select>

 

<!--自动参数映射-->

<insert id="insertOneUser1" parameterClass="com.air.Account">

INSERT INTO USER_ACCOUNT 

USERNAME, PASSWORD, GROUPNAME

)VALUES(

#username#,#password#,#groupname# 

)

</insert>

 

<!--内联参数映射-->

<insert id="insertOneUser2" parameterClass="com.air.Account">

INSERT INTO USER_ACCOUNT 

USERNAME, PASSWORD, GROUPNAME

)VALUES(

#username:VARCHAR#,

#password:VARCHAR#,

#groupname:VARCHAR# 

)

</insert>

 

<!--外联参数映射-->

<parameterMap  id="parameterMapEx" class="com.air.Account">

<parameter property="username" jdbcType="VARCHAR"/>

<parameter property="password" jdbcType="VARCHAR"/>

<parameter property="groupname" jdbcType="VARCHAR"/>

</parameterMap>

<insert id="insertOneUser3" parameterMap="parameterMapEx">

INSERT INTO USER_ACCOUNT 

USERNAME, PASSWORD, GROUPNAME

)VALUES(

?,?,? 

)

</insert>

<!--自动生成的键-->

<insert id="insertOneUser4" parameterClass="com.air.Account">

INSERT INTO USER_ACCOUNT 

USERID,USERNAME, PASSWORD, GROUPNAME

)VALUES(

#userid#,

#username#,

#password#,

#groupname#  

)

<selectKey

keyProperty="userid"

resultClass="int">

SELECT LAST_INSERT_ID()

</selectKey>

</insert>

 

<!--存储过程-->

<parameterMap id="pro" class="java.util.Map">

<parameter property="name" jdbcType="VARCHAR" 

    javaType="string" mode="IN"/>

</parameterMap>

<procedure id="pro_insert" parameterMap="pro">

{call new_proc(?)}

</procedure>

</sqlMap>

 
2011-03-21 22:24
 
2011-02-10 9:00

 

我经常会这样来设置服务器端的JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k"

-server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
-Xmx:java heap最大值,使用的最大内存
上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
-XX:PermSize:设定内存的永久保存区域
-XX:MaxPermSize:设定最大内存的永久保存区域
-XX:MaxNewSize:
-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-Xss:每个线程的Stack大小
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间
提示:此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。

详细设置为:
%EIO_JRE_HOME%/bin/java -Xms512m -Xmx1024m -XXermSize=128m -XX:NewSize=64m -XX:MaxNewSize=128m -XX:NewRatio=3 -XX:SurvivorRatio=6  -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=40 -Xverify:none -Dsun.java2d.ddlock=true -Dsun.awt.noerasebackground=true -Dswing.aatext=true -jar %EIO_HOME%/EIOffice.jar
 
2011-01-30 17:29

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=21,server=y,suspend=n"

 
2011-01-27 9:59

1、能用条件三元运算符的时候尽量用,但是业务逻辑可能会看不清晰
2、能用switch的时候尽量用
3、多用if{ return; }...if{ return; }...结构,或者while(true) { if { break; }...if { break; }...break; }结构(用于不方便退出整个方法的时候,但有死循环风险,代码习惯好的可以用),分支条件清晰,多层嵌套if...else...最容易犯错误
4、尽量分拆方法,让if...else...里面只有一句方法调用,逻辑也清晰

 
2011-01-26 13:08

一、综述
本文比较了RMI、Hessian、Burlap、Httpinvoker、WebService5这种通讯协议的在不同的数据结构和不同数据量时的传输性能。
RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础。但它只能用于JAVA程序之间的通讯。
Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口。协议的规范公开,可以用于任意语言。
Httpinvoker是SpringFramework提供的远程通讯协议,只能用于JAVA程序间的通讯,且服务端和客户端必须使用SpringFramework。
Web service是连接异构系统或异构语言的首选协议,它使用SOAP形式通讯,可以用于任何语言,目前的许多开发工具对其的支持也很好。

测试结果显示,几种协议的通讯效率依次为:
RMI > Httpinvoker >= Hessian >> Burlap >> web service
RMI不愧是JAVA的首选远程调用协议,非常高效稳定,特别是在大数据量的情况下,与其他通讯协议的差距尤为明显。
HttpInvoker使用java的序列化技术传输对象,与RMI在本质上是一致的。从效率上看,两者也相差无几,HttpInvoker与RMI的传输时间基本持平。
Hessian在传输少量对象时,比RMI还要快速高效,但传输数据结构复杂的对象或大量数据对象时,较RMI要慢20%左右。
Burlap仅在传输1条数据时速度尚可,通常情况下,它的毫时是RMI的3倍。
Web Service的效率低下是众所周知的,平均来看,Web Service的通讯毫时是RMI的10倍。

二、结果分析
1、直接调用
直接调用的所有毫时都接近0,这说明程序处理几乎没有花费时间,记录的全部时间都是远程调用耗费的。
2、RMI调用
与设想的一样,RMI理所当然是最快的,在几乎所有的情况下,它的毫时都是最少的。特别是在数据结构复杂,数据量大的情况下,与其他协议的差距尤为明显。
为了充分发挥RMI的性能,另外做了测试类,不使用Spring,用原始的RMI形式(继承UnicastRemoteObject对象)提供服务并远程调用,与Spring对POJO包装成的RMI进行效率比较。结果显示:两者基本持平,Spring提供的服务还稍快些。
初步认为,这是因为Spring的代理和缓存机制比较强大,节省了对象重新获取的时间。
3、Hessian调用
caucho公司的resin服务器号称是最快的服务器,在java领域有一定的知名度。Hessian做为resin的组成部分,其设计也非常精简高效,实际运行情况也证明了这一点。平均来看,Hessian较RMI要慢20%左右,但这只是在数据量特别大,数据结构很复杂的情况下才能体现出来,中等或少量数据时,Hessian并不比RMI慢。
Hessian的好处是精简高效,可以跨语言使用,而且协议规范公开,我们可以针对任意语言开发对其协议的实现。目前已有实现的语言有:java, c++, .net, python, ruby。还没有delphi的实现。
另外,Hessian与WEB服务器结合非常好,借助WEB服务器的成熟功能,在处理大量用户并发访问时会有很大优势,在资源分配,线程排队,异常处理等方面都可以由成熟的WEB服务器保证。而RMI本身并不提供多线程的服务器。而且,RMI需要开防火墙端口,Hessian不用。
4、Burlap调用
Burlap与Hessian都是caucho公司的开源产品,只不过Hessian采用二进制的方式,而Burlap采用xml的格式。
测试结果显示,Burlap在数据结构不复杂,数据量中等的情况下,效率还是可以接受的,但如果数据量大,效率会急剧下降。平均计算,Burlap的调用毫时是RMI的3倍。
我认为,其效率低有两方面的原因,一个是XML数据描述内容太多,同样的数据结构,其传输量要大很多;另一方面,众所周知,对xml的解析是比较费资源的,特别对于大数据量情况下更是如此。
5、HttpInvoker调用
HttpInvoker是SpringFramework提供的JAVA远程调用方法,使用java的序列化机制处理对象的传输。从测试结果看,其效率还是可以的,与RMI基本持平。
不过,它只能用于JAVA语言之间的通讯,而且,要求客户端和服务端都使用SPRING框架。
另外,HttpInvoker 并没有经过实践的检验,目前还没有找到应用该协议的项目。
6、web service调用
       本次测试选用了apache的AXIS组件作为WEB SERVICE的实现,AXIS在WEB SERVICE领域相对成熟老牌。
为了仅测试数据传输和编码、解码的时间,客户端和服务端都使用了缓存,对象只需实例化一次。但是,测试结果显示,web service的效率还是要比其他通讯协议慢10倍。
如果考虑到多个引用指向同一对象的传输情况,web service要落后更多。因为RMI,Hessian等协议都可以传递引用,而web service有多少个引用,就要复制多少份对象实体。
Web service传输的冗余信息过多是其速度慢的原因之一,监控发现,同样的访问请求,描述相同的数据,web service返回的数据量是hessian协议的6.5倍。另外,WEB SERVICE的处理也很毫时,目前的xml解析器效率普遍不高,处理xml <-> bean很毫资源。从测试结果看,异地调用比本地调用要快,也从侧面说明了其毫时主要用在编码和解码xml文件上。这比冗余信息更为严重,冗余信息占用的只是网络带宽,而每次调用的资源耗费直接影响到服务器的负载能力。(MS的工程师曾说过,用WEB SERVICE不能负载100个以上的并发用户。)
测试过程中还发现,web service编码不甚方便,对非基本类型需要逐个注册序列化和反序列化类,很麻烦,生成stub更累,不如spring + RMI/hessian处理那么流畅简洁。而且,web service不支持集合类型,只能用数组,不方便。

 
   
 
 
文章分类
 
   
 
文章存档
 
     
 
最新文章评论
  

多谢指教了
 

嗯,理解了
 

还是不明白~~ 单单一个客户端的机子能装svn用吗? 就是把自己的电脑即做服务器,又做
 

搞错了,我是包装的obj,难怪没用。
 

输出:one two three four five vararr2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] $.eac
   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu