paulwong

#

TOMCAT调优

  1. 安装AB
    rpm -ivh http://repo.webtatic.com/yum/centos/5/`uname -i`/webtatic-release-5-0.noarch.rpm
    yum install httpd-tools

  2. 使用AB
    ab -r -n 100000 -c 10000 http://10.120.151.223:8080/
    需加-r,则在收到SOCKET错误的时候不会退出
    这段的意思是发送100000个请求,其中并发是10000个

  3. 修改LINUX能打开的文件的最大数
    2、  修改目标
    我们的目标是:让每一个用户登录系统后系统打开的最大文件数都是我们设定好的。
    但我这里不得不说的是:非常遗憾,网上很多这方面关于ulimit设置修改资源限制的文章,但没一篇文章管用。
    把这个目标分解为两个目标:

    2.1、设置对root用户登录系统生效
    这个目标可以实现起来不难

    2.2、设置对所有用户生效
    这个就非常麻烦了,弄不好还会把你的系统给整坏,因为要重编译Linux的内核才行!
    所以权衡之下,我只实现了第一个目标,因为第二个目标的风险太大,我想如果我之前知道这点,那么我在装系统的时候我会先做这个处理,但现在我觉得已经晚了。

    3、  修改的地方

    3.1、修改/etc/security/limits.conf
    通过 vi /etc/security/limits.conf修改其内容,在文件最后加入(数值也可以自己定义):
    * soft  nofile = 65536
    * hard  nofile = 65536
    root soft nofile 65536
    root hard nofile 65536
    * 表示该配置对所有用户均有效,root用户要特别加两行。

    3.2、修改/etc/profile
    通过vi /etc/profile修改,在最后加入以下内容
    ulimit -n 65536
    然后重新登录即可生效了。
    说明:
    其实只修改/etc/profile就可以生效了,但我还是建议把/etc/security/limits.conf也修改一下。
    最后强调的是,你如果要使得修改对所有用户都生效,那么现在看来你只能重新编译Linux的内核才行。


  4. 安装APR,参考:http://jmchung.github.io/blog/2013/09/06/centos-installing-apache-portable-runtime-apr-for-tomcat/
    $ wget http://apache.fayea.com//apr/apr-1.5.1.tar.gz
    $ cd /path/to/tomcat/bin
    $ tar zxvf tomcat-native.tar.gz
    $ cd tomcat-native-x.y.z-src/jni/native
    $ ./configure --with-apr=/usr/local/apr --with-ssl=/usr/lib64/openssl
    $ make install

  5. 修改server.xml
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
            URIEncoding
    ="UTF-8"  
                  enableLookups
    ="false" 
                  tcpNoDelay
    ="true"
            compression
    ="on" compressionMinSize="2048"
            maxThreads
    ="20000" connectionTimeout="-1"
            compressableMimeType
    ="application/json,text/html,text/xml,text/javascript,text/css,text/plain" redirectPort="8443"/>


  6. https的也要修改:
    <Connector SSLEnabled="true" clientAuth="false"
            port
    ="8443" keystoreFile="/root/java/keystore/server.jks" keystorePass="123456"
            protocol
    ="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
            secure
    ="true" sslProtocol="TLS" 
        URIEncoding
    ="UTF-8"  minSpareThreads="25" maxSpareThreads="75"
               enableLookups
    ="false" disableUploadTimeout="true" connectionTimeout="20000"
        acceptCount
    ="1000"  maxThreads="1000" maxProcessors="1000" minProcessors="5"
        useURIValidationHack
    ="false" tcpNoDelay="true"
        compression
    ="on" compressionMinSize="2048"
        compressableMimeType
    ="application/json,text/html,text/xml,text/javascript,text/css,text/plain" />

  7. JVM启动参数
    JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

参考网址:
http://www.cnblogs.com/baibaluo/archive/2011/08/23/2150305.html
http://ifeve.com/tomcat-connector-tuning-2/
http://sndapk.blog.51cto.com/5385144/1306278

posted @ 2015-01-06 17:40 paulwong 阅读(518) | 评论 (0)编辑 收藏

TomEE资源

Getting started with Apache TomEE
http://jaxenter.com/getting-started-with-apache-tomee-105824.html



posted @ 2015-01-05 00:10 paulwong 阅读(347) | 评论 (0)编辑 收藏

Architecture for Redis cache & Mongo for persistence

Caching with Spring Data Redis
http://www.javacodegeeks.com/2013/02/caching-with-spring-data-redis.html

Architecture for Redis cache & Mongo for persistence
http://stackoverflow.com/questions/11218941/architecture-for-redis-cache-mongo-for-persistence

MongoDB with redis
http://stackoverflow.com/questions/10696463/mongodb-with-redis/10721249#10721249

Caching Data in Spring Using Redis
http://caseyscarborough.com/blog/2014/12/18/caching-data-in-spring-using-redis/

Springside Redis
https://github.com/springside/springside4/wiki/Redis

Spring Cache注解+Redis
http://hanqunfeng.iteye.com/blog/2176172













posted @ 2015-01-04 15:50 paulwong 阅读(474) | 评论 (0)编辑 收藏

HADOOP各种框架应用领域

***** Data Analytics : Technology Area *****
1. Real Time Analytics : Apache Storm
2. In-memory Analytics : Apache Spark
3. Search Analytics : Apache Elastic search, SOLR
4. Log Analytics : Apache ELK Stack,ESK Stack(Elastic Search, Log
Stash, Spark Streaming, Kibana)
5. Batch Analytics : Apache MapReduce

***** NO SQL DB *****
1. MongoDB
2. Hbase
3. Cassandra

***** SOA *****
1. Oracle SOA
2. JBoss SOA
3. TiBco SOA
4. SOAP, RESTful Webservices 

posted @ 2015-01-04 12:57 paulwong 阅读(526) | 评论 (0)编辑 收藏

项目管理资源

Management Tutorials
http://www.tutorialspoint.com/management_tutorials.htm







posted @ 2014-12-29 23:16 paulwong 阅读(355) | 评论 (0)编辑 收藏

JAVAEE资源


http://www.importnew.com/12408.html

Java EE + MongoDb with Apache TomEE and Jongo Starter Project
http://www.javacodegeeks.com/2014/09/java-ee-mongodb-with-apache-tomee-and-jongo-starter-project.html

From Spring to Java EE 6
http://www.javacodegeeks.com/2011/11/from-spring-to-java-ee-6.html


Java EE 7 and WebSocket API for Java (JSR 356) with AngularJS on WildFly
http://www.javacodegeeks.com/2014/01/java-ee-7-and-websocket-api-for-java-jsr-356-with-angularjs-on-wildfly.html



lll

posted @ 2014-12-26 16:29 paulwong 阅读(669) | 评论 (0)编辑 收藏

Eclipse下svn的创建分支/合并/切换使用

       最近接项目要求,要在svn主干上创建分支,用分支来进行程序的bug修改,而主干上进行新功能的开发。分支上的bug修改完,发布后,可以合并到主干上。项目程序可以在主干和分支之间进行切换,来实现主干和分支的同时维护。

       1.创建分支

        创建分支实际上就是将程序copy一份到指定的分支目录,如下图示:



在项目名称上点击右键,弹出菜单,选择“Team”,再选择“Branch/Tag”,弹出下面的页面: 



 

上图中的“Copy to URL”填写创建新分支的路径地址,后面会将程序copy到该目录下,形成新的分支。点击“Next:

 

 

选择当前最新的版本,点击“Next



 

如果勾选了上图下面的switch working copy to new branch/tageclipse的程序项目会自动切换到分支下。这里我们不选择,待会自己切换

这样就创建了一个1.0的分支

         2.合并

         可以从主干合并到分支,也可以从分支合并到主干,根据需要可以选择合适的选项,如下图:



 

上图中的选项:

        1) 从主干合并到分支

        2) 从分支合并到主干

        3) 将主干上的修改合并到分支

        4) 合并2个分支到主干

        5) 从主干到分支,手工指定不需要合并的修改

        6) 从主干到分支,手工指定要合并的修改



 

上图显示没有任何修改,所以不用进行合并。

 

3.切换

在项目名称上点击右键,选择“Team –> switch to another Branch/Tag/Revision”。



 

选择需要切换的目的地址,点击ok即可。

 

这样,在项目里就可以在主干和若干分支间进行任意切换,来实现对不同版本/分支的程序进行修改提交操作。

posted @ 2014-12-26 13:19 paulwong 阅读(992) | 评论 (0)编辑 收藏

Tuscany 2 的基本配置与流程

实习期间mentor让看看Tuscany——apache的一个顶级项目。之前一直没有接触过,听mentor说了下用途过后,感觉其像是alibaba的分布式服务框架Dubbo,简要看了看,似乎和RMI也有相关性。总之它也是面向服务的分布式框架。经过一下午的尝试,发现Tuscany 2和Tuscany 1还是有比较大的不同(API方面、设计思想没有深入研究不知道),网上关于Tuscany的资料也不多,所以在此写文章mark一下。

Tuscany 1的API参考这位博主http://blog.csdn.net/ajun_studio/article/details/7770023


1. 准备

首先是在工程中引入Tuscany 2.0.1的jar包,从一个Apache的China镜像上不难找到(PS:Tuscany 1在官网上已经不维护了)。

工程需要实现客户端调用远程服务器端的服务的功能。该项目中调用远程完成“加”的功能。


2. 入门

首先添加IAdd接口

package com.ajun.tuscany.server;  
  
public interface IAdd {  
    double add(double n1,double n2);  
}  
然后是实现类Add

package com.ajun.tuscany.server;  
  
public class Add implements IAdd {  
  
    @Override  
    public double add(double n1, double n2) {  
        // TODO Auto-generated method stub  
        return n1 + n2;  
    }  
  
加减乘除都属于“计算”类,此处为了简便,只实现“加”方法。然后是“计算”的接口。

package com.ajun.tuscany.server;  
  
public interface ICalculator {  
    double add(double n1, double n2);  
}  
然后是“计算”的实现,注意一定要在setter中加入@Reference,否则会报错,这里类似于Spring的注入。

package com.ajun.tuscany.server;  
  
import org.oasisopen.sca.annotation.Reference;  
  
public class Calculator implements ICalculator {  
  
    private IAdd add;  
  
    public IAdd getAdd() {  
        return add;  
    }  
  
    @Reference  
    public void setAdd(IAdd add) {  
        this.add = add;  
    }  
  
    @Override  
    public double add(double n1, double n2) {  
        // TODO Auto-generated method stub  
        return this.add.add(n1, n2);  
    }  
  
}  
到此,基本的业务逻辑类就编写好了,接下来,是Tuscany中重要的配置文件,即XXX.composite,其本质也是一个xml。如果不是面向分布式服务,该xml文件结构类似Spring的application.xml。下面是Calculator.composite,注意配置文件中reference,name标记为add,应该也是同Spring的大写首字母规则,通过settrt注入。

<?xml version="1.0" encoding="UTF-8"?>           
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"  
           xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"  
           targetNamespace="http://sample"  
           xmlns:sample="http://sample"  
           xmlns:scallop="http://scallop/xmlns/sca/1.1"   
           name="Calculator" >    
      
    <component name="CalculatorServiceComponent">    
        <implementation.java class="com.ajun.tuscany.server.Calculator" />  
        <reference name="add" target="AddComponent"/>     
    </component>    
          
    <component name="AddComponent">    
        <implementation.java class="com.ajun.tuscany.server.Add" />    
    </component>    
      
</composite>   

最后是运行main的类

package com.ajun.tuscany.server;  
  
import org.apache.tuscany.sca.node.Node;  
import org.apache.tuscany.sca.node.NodeFactory;  
  
public class StartService {  
  
    public static void main(String[] args) {  
        Node node = NodeFactory.newInstance().createNode(  
                "Calculator.composite");  
        node.start();  
        System.out.println("service启动");  
        ICalculator c = node.getService(Calculator.class,  
                "CalculatorServiceComponent");  
        System.out.println(c.add(2, 2));  
    }  
  
运行输出如下

2014-11-10 17:39:24 org.apache.tuscany.sca.node.impl.NodeFactoryImpl loadContributions
信息: Loading contribution: file:/E:/HuRanjie/EclipseWorkspace/Calculatoer_01/bin/
2014-11-10 17:39:24 org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerService
信息: RMI service registered: rmi://127.0.0.1:8099/CalculatorRMIService
2014-11-10 17:39:24 org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl addEndpoint
信息: Add endpoint - binding.rmi - rmi://127.0.0.1:8099/CalculatorRMIService
2014-11-10 17:39:24 org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl addEndpoint
信息: Add endpoint - binding.sca - AddComponent/Add
service启动
4.0


3. 远程调用rmi

上面并没有将“计算”类作为一个服务,暴露给远程调用,只是实现了本地的装配。下面将其作为服务给远程调用,后面可以看到,只需要暴露一个包括host、port、serviceName


首先,修改配置文件,修改为如下样子——在本地(127.0.0.1)的8099端口暴露出名字为CalculatorRMIService的服务

<?xml version="1.0" encoding="UTF-8"?>           
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"  
           xmlns:tuscany
="http://tuscany.apache.org/xmlns/sca/1.1"  
           targetNamespace
="http://sample"  
           xmlns:sample
="http://sample"  
           xmlns:scallop
="http://scallop/xmlns/sca/1.1"   
           name
="Calculator" >    
      
    <component name="CalculatorServiceComponent">    
        <implementation.java class="com.ajun.tuscany.server.Calculator" />  
          
        <service name="Calculator">    
            <interface.java interface="com.ajun.tuscany.server.ICalculator"/>    
            <tuscany:binding.rmi uri="rmi://127.0.0.1:8099/CalculatorRMIService"/>    
        </service>  
          
        <reference name="add" target="AddComponent"/>     
    </component>    
          
    <component name="AddComponent">    
        <implementation.java class="com.ajun.tuscany.server.Add" />    
    </component>    
      
</composite>   

服务器端的main主要功能是启动该服务,如下

package com.ajun.tuscany.server;  
  
import org.apache.tuscany.sca.node.Node;  
import org.apache.tuscany.sca.node.NodeFactory;  
  
public class StartService {  
  
    public static void main(String[] args) {  
        Node node = NodeFactory.newInstance().createNode(  
                "Calculator.composite");  
        node.start();  
        System.out.println("service启动");  
    }  
  

客户端通过rmi调用服务器端的服务,来实现功能,如下

package com.ajun.tuscany.client;  
  
import java.rmi.Naming;  
import com.ajun.tuscany.server.ICalculator;  
  
public class CalculatorClient {  
  
    public static void main(String[] args) throws Exception {  
         ICalculator c= (ICalculator) Naming.lookup("//127.0.0.1:8099/CalculatorRMIService");    
         System.out.println(c.add(1, 2));    
    }  
}  

启动服务端输出


2014-11-10 18:00:30 org.apache.tuscany.sca.node.impl.NodeImpl start
信息: Starting node: http://tuscany.apache.org/sca/1.1/nodes/default0 domain: default
2014-11-10 18:00:30 org.apache.tuscany.sca.node.impl.NodeFactoryImpl loadContributions
信息: Loading contribution: file:/E:/HuRanjie/EclipseWorkspace/Calculatoer_01/bin/
2014-11-10 18:00:31 org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerService
信息: RMI service registered: rmi://127.0.0.1:8099/CalculatorRMIService
2014-11-10 18:00:31 org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl addEndpoint
信息: Add endpoint - binding.rmi - rmi://127.0.0.1:8099/CalculatorRMIService
2014-11-10 18:00:31 org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl addEndpoint
信息: Add endpoint - binding.sca - AddComponent/Add
service启动

客户端输出

3.0

posted @ 2014-12-24 14:07 paulwong 阅读(1844) | 评论 (0)编辑 收藏

SOA资源

Tuscany
档案项目架构文档SOA搭建过程
http://www.open-open.com/doc/view/54781005211b45fda0c15a44110efeaf


大用户量下的系统架构(SOA)
http://www.open-open.com/doc/view/2def65d401e949c1b8fe3bc306701234

posted @ 2014-12-23 23:53 paulwong 阅读(369) | 评论 (0)编辑 收藏

SequoiaDB巨杉数据库

SequoiaDB(巨杉数据库)是一款分布式文档型NoSQL数据库,是业界唯一支持事务和SQL的产品。SequoiaDB既可作为Hadoop与Spark的数据源以满足实时查询和分析的混合负载,也可独立作为高性能、
灵活易用的数据库被应用程序直接使用。SequoiaDB已拥有的客户包括知名IT互联网公司和世界五百强企业。


http://www.sequoiadb.com/index.php?p=demo

posted @ 2014-12-22 23:18 paulwong 阅读(627) | 评论 (0)编辑 收藏

仅列出标题
共116页: First 上一页 41 42 43 44 45 46 47 48 49 下一页 Last