'프로그래밍'에 해당되는 글 100건

  1. 2014/08/08 용비 Linux TCP Connection Setting
  2. 2014/07/18 용비 JedisLock Lock Mechanism
  3. 2014/07/11 용비 Gradle Build Script with Dependencies jars
  4. 2014/07/10 용비 eclipse error : 기본 클래스 ***을(를) 찾을 수 없습니다
  5. 2014/07/10 용비 Jetty HttpClient Use Case

Linux TCP Connection Setting

Articles 2014/08/08 17:23 용비
Linux에서 TCP기반 (HTTP 포함) 서버를 개발할 때, 성능을 위해서 튜닝을 해야하는 항목들이 있다.

Root 계정으로 로그인 한 후, 다음 항목들을 변경하면 HTTP Request의 성능이 향상된다.

1. tcp_tw_reuse 설정
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse


2. tcp_fin_timeout 설정
echo 5 > /proc/sys/net/ipv4/tcp_fin_timeout


3. tcp_orphan_retries 설정
echo 7 > /proc/sys/net/ipv4/tcp_orphan_retries


4. tcp_rfc1337 설정
echo 1 > /proc/sys/net/ipv4/tcp_rfc1337


Port Forwarding을 설정했을 경우에는 다음 항목을 추가로 설정한다.
echo 1000000 > /proc/sys/net/netfilter/nf_conntrack_max
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close_wait
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_fin_wait
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_last_ack
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_recv
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_sent
echo 10 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait


받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/612

JedisLock Lock Mechanism

Articles 2014/07/18 18:17 용비
JedisLock lock = new JedisLock(jedis, lockkey, acquireTimeout, expirationTimeout);

lock.acquire();
lock.release();

When lock.acquire() method called, in JedisLock class, jedis client setnx method call with lockkey like next.

if (jedis.setnx(lockKey, expiresStr) == 1) {
   ..........
}

결국 Jedis Lock을 잡기 위해서는 lockkey로 redis에 key, value를 입력한 다음 처리하게 된다.
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/607

Gradle Version : 1.12

One jar Package included all dependencies

apply plugin: 'java'
version '1.0'

jar {
//All dependencies into one jar.
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
manifest {
attributes 'Implementation-Title':'Title', 'Implementation-Version': version
}
}


repositories {
    mavenCentral()
}

dependencies {
compile project(':common:logger')
compile group:"redis.clients", name:"jedis", version:"2.4.2"
compile group:"org.apache.httpcomponents", name:"httpclient", version:"4.3.3"
compile group:"org.apache.httpcomponents", name:"httpmime", version:"4.3.3"
compile group:"org.eclipse.jetty", name:"jetty-servlet", version:"9.2.0.RC0"
compile group:"com.sun.jersey", name:"jersey-bundle", version:"1.18.1"
compile group:"com.google.code.gson", name:"gson", version:"2.2.4"
compile group:"com.github.jedis-lock", name:"jedis-lock", version:"1.0.0"
compile group:"org.mongodb", name:"mongo-java-driver", version:"2.12.1"
compile group:"com.ning", name:"async-http-client", version:"1.8.9"
testCompile group:"junit", name:"junit", version:"4.11+"
}

One jar Package referenced all dependencies (Copy into lib folder)

apply plugin: 'java'
version '1.0'

//Copy all dependencies
task copyToLib( type: Copy ) {
    into "$buildDir/libs/lib"
    from configurations.runtime
}

jar {
       //Copy all dependencies
       dependsOn copyToLib

manifest {
attributes 'Implementation-Title':'Title', 'Implementation-Version': version
}
}


repositories {
    mavenCentral()
}

dependencies {
compile project(':common:logger')
compile group:"redis.clients", name:"jedis", version:"2.4.2"
compile group:"org.apache.httpcomponents", name:"httpclient", version:"4.3.3"
compile group:"org.apache.httpcomponents", name:"httpmime", version:"4.3.3"
compile group:"org.eclipse.jetty", name:"jetty-servlet", version:"9.2.0.RC0"
compile group:"com.sun.jersey", name:"jersey-bundle", version:"1.18.1"
compile group:"com.google.code.gson", name:"gson", version:"2.2.4"
compile group:"com.github.jedis-lock", name:"jedis-lock", version:"1.0.0"
compile group:"org.mongodb", name:"mongo-java-driver", version:"2.12.1"
compile group:"com.ning", name:"async-http-client", version:"1.8.9"
testCompile group:"junit", name:"junit", version:"4.11+"
}
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/602

eclipse 상에서 프로젝트 작업을 하다가, main() method를 포함하고 있는 다른 클래스들을 지웠을 때, 특히 maven project에서 maven clean을 실행하고 난 이후에 제목과 같은 오류가 발생하면서 프로그램이 실행되지 않을 때가 있다.

그럴 때는 Menu->Project->clean을 하면 된다.
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/601

Jetty HttpClient Use Case

Articles 2014/07/10 14:12 용비
Jetty HttpClient를 이용하여 HTTP 호출

try {
//Synchronous Request
HttpClient httpClient = new HttpClient();
//set up httpClient
httpClient.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL);
httpClient.start();
//Request-Response Exchange
ContentExchange contentExchange = new ContentExchange();
contentExchange.setMethod(method);
contentExchange.setURL(url);
//Request Header
if (keyApply) {
if (baseApply)
contentExchange.addRequestHeader("Authorization", "Basic " + authBase64Encode);
else
contentExchange.addRequestHeader("Authorization", key);
}
//Request Body
contentExchange.addRequestHeader("Content-Type", contentType);
if (data == null || data.length == 0) {
contentExchange.addRequestHeader("Content-Length", "0");
resultData.append("Content-Length : 0\n");
}
else {
contentExchange.addRequestHeader("Content-Length", String.valueOf(data.length));
resultData.append("Content-Length : " + String.valueOf(data.length) + "\n");
contentExchange.setRequestContentSource(new ByteArrayInputStream(data));
}
httpClient.send(contentExchange);
//Wait for Response Done
int exchangeStatus = contentExchange.waitForDone();
//Response Data
int responseStatus = contentExchange.getResponseStatus();
resultData.append("Response Status : " + responseStatus + "\n");
if (exchangeStatus == HttpExchange.STATUS_COMPLETED) {
//Response Data
String response = contentExchange.getResponseContent();
if (response != null && !response.isEmpty())
resultData.append("Response Data : \n" + response + "\n");
else
resultData.append("Response Data is null.\n");
}
} catch (Exception e1) {
e1.printStackTrace();
resultData.setText(e1.getMessage());
//throw new ServletException(e1);
}

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/600