'IT/Tool'에 해당되는 글 5건

  1. 2015.03.03 PowerShell 익숙해지기.
  2. 2013.04.01 Git
  3. 2013.03.25 캡쳐부터 자동 웹업로드되는 막강 툴! Cropper!
  4. 2013.02.26 JMeter
  5. 2013.02.18 JMeter - Java Request
IT/Tool2015. 3. 3. 10:32

PowerShell 익숙해지기.


- 비공개로 시작

- 필자는 자바 프로젝트를 git으로 갈아타면서 기존의 svn의 .svn폴더들을 일괄 삭제를 하고 싶어졌다.

svn export로 간단히 해결되지만 svn이 설치가 안되어 있어서 구글에서 커맨드라인에서 일괄 삭제할수 있는 배치 성격의 스크립트가 있나서 찾아보았으나 "파워쉘" 많이도 들어봤지만 써보지도 못한 그녀석의 스크립트 발견. native application으로  이미 윈도우에 포함이 되어 있어서 아래의 스크립트로 간단히 실행하여 일괄 삭제를 하였다. 

gci -fil '.svn' -r -force | ri -r -force

-참고

http://stackoverflow.com/questions/4889619/command-to-recursively-remove-all-svn-directories-on-windows



'IT > Tool' 카테고리의 다른 글

Git  (0) 2013.04.01
캡쳐부터 자동 웹업로드되는 막강 툴! Cropper!  (0) 2013.03.25
JMeter  (0) 2013.02.26
JMeter - Java Request  (0) 2013.02.18
Posted by 억사마
IT/Tool2013. 4. 1. 15:41

Git

아래 내용은 필자의 프로젝트 적용시에 좌충우돌 겪으면서 간단한 레퍼런스는 넘어 트러블슈팅했던 내용을 담아 Git에 대해 일기같이 기록을 담아둘려고 적는 기록이다.


1. GitHub 등록

2. http://code.google.com/p/msysgit/downloads/list 가서 window용 Git 다운

3. Reference 

Git 배우는데 최고봉 -> http://learnbranch.urigit.com/

 http://rogerdudler.github.com/git-guide/index.ko.html 

 http://gitready.com/

 http://www.dreamy.pe.kr/zbxe/CodeClip/95408

 http://blog.outsider.ne.kr/865

 http://gitref.org/index.html

 http://rocksea.tistory.com/entry/github-github-%EC%82%AC%EC%9A%A9%EB%B2%95

 http://www.dreamy.pe.kr/zbxe/CodeClip/95408



git command 

 설명

 git config --list

 config 내용 조회

 git config --global http.proxy http://168.219.61.252:8080

 git proxy를 설정하는 부분(여기참조)이며 ://와 Ip사이에 id@pw로 내용을 입력하여 설정하여 사용 가능

 git config --global color.status auto  콘솔모드에서 글자 하이라이트 설정하는 명령어
 git config --global color.branch auto
 git diff  변경사항들을 diff명령으로 확인하기 
 git log  커밋 히스토리 확인하기
 git commit --amend -m "More changes - now correct"  커밋 메세지 수정하기

 git init

 저장소 만들기

 git clone https://~

 로컬로 받아오기~
 git log 로그를 통해 commit id 찾는다.
 git reset --hard 7c21ab3ea 7c21ab3ea에 해당되는 push 버젼으로 local branch reset를 한다.
 git push origin +master 강제로 conflict를 무시하고 강제로 push 
 git stash stack 구조로 현재 local의 working tree 보관 
 git pop 위에 쌓은걸 꺼내오기


 



git ignore


.gitignore 파일 입력 규칙

- 아무것도 없는 라인이나, #로 시작하는 라인은 무시한다.

- 표준 Glob 패턴을 사용한다.

- 슬래시(/)로 시작하면 하위 디렉토리에 적용되지(Recursivity) 않는다.

- 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.

- 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.


#Git bash 명령어 - .gitignore 적용하기


#1. .ignore파일을 작성한다.


#2. 모든 파일을 git index에서 제거 한다.(무시대상 파일 뿐만아니라 전부 index에서 삭제)

git rm -r --cached .


#3. 다시 index에 추가 한다.(이때 무시대상 파일을 제외한 나머지 파일만 추가됨)

git add .


#4. 적절한 메세지와 함께 commit

git commit -m '.gitignore 적용'


#5. 다른 사람과 공유할 준비가 되었다면 push

git push origin [branch_name]




Reference 

http://gitready.com/beginner/2009/01/21/pushing-and-pulling.html



'IT > Tool' 카테고리의 다른 글

PowerShell 익숙해지기.  (0) 2015.03.03
캡쳐부터 자동 웹업로드되는 막강 툴! Cropper!  (0) 2013.03.25
JMeter  (0) 2013.02.26
JMeter - Java Request  (0) 2013.02.18
Posted by 억사마
IT/Tool2013. 3. 25. 11:17

최근에 기술 관련 문의가 많아서 영작에도 어려움을 겪고 그림도 올리려고 하면 일일이 캡쳐하고 그걸 다시 업로드해서 붙여서 이걸 어떻게 하면 간단하게 해결할까? 하는 고민에 stackoverflow를 찾아보니 간단히 해결되는 툴을 찾았다.

Cropper라는 툴인데 플러그인까지 같이 깔면 자동으로 캡쳐도 하고 그걸 웹으로 올려주고 링크를 따주기 때문에 뭔가 그림 첨부할때 상당히 편하다고 볼 수 있다.


우선 Cropper와 확장 플러그인을 받아야한다.

1) Cropper에 가서 Downloads에서 최신 버젼 다운로드

2) Cropper 확장플러그인 사이트 가서 최신 버젼 다운로드

3) 1)번 설치하고 설치폴더하위에 plugins에 2번에서 다운로드한 걸 압축을 풀어 dll파일 추가 (C#으로 만들어진 플러그인이라고 함 dll형식)

(위는 Cropper의 Imgur 플러그인 사용하여 캡쳐해서 Imgur에 업로드하고 링크딴 걸 첨부로 붙였다.)

4) 그다음 실행하면 시스템 트레이콘으로 생기고 실행을 해보자

5) 옵션에 가서 우선 Output을 자신이 원하는 사진업로드사이트 선택하는데 저같은 경우는 Imgur로 선택을 하기로 한다. "Send to Imgur"선택 

(imageStack의 경우는 별도의 인증절차 없이 사용가능하다)


6) Imgur같은 경우 처음에만 인증키 입력을 하라고 나오면 가서 해당 사이트에 회원가입하 인증키를 받아 넣으면 사용가능




'IT > Tool' 카테고리의 다른 글

PowerShell 익숙해지기.  (0) 2015.03.03
Git  (0) 2013.04.01
JMeter  (0) 2013.02.26
JMeter - Java Request  (0) 2013.02.18
Posted by 억사마
IT/Tool2013. 2. 26. 19:03

제일 첫 소개는 당연히 JMeter Wiki이다.

JMeter 단축키

JMeter csv 파일 읽어 User(thread)마다 가변 파라메터 셋팅하기 (여기)



그럼 실제로 한번 해보도록 하자.

우선, 아래는 JMeter를 사용한 안전성, 신뢰성, 부하, 기능 테스트를 위한 테스트 구성이다.


그리고 각 테스트에 대한 시나리오는 다음과 같다.

 안전성 테스트

 FailOver 테스트 - Single, Multi node failure시에 데이터 유실 무 검증 

 
 Aging 테스트 - 장시간동안 서버 처리 기능 검증 
 확장성 테스트

 기존 서버 구성에서 서버가 추가될 경우 부하 Rebalancing 기능 검증

 
 부하  테스트

 최대 한계에 대한 임계치를 구하고, 로드 밸런싱 기능의 성능 검증 

 
 기능 테스트

 Infinispan의 기본 기능, 그리고 추가 확장 기능 검증

 


그리고 위 테스트를 위한 환경 셋팅을 위한 변수 인자들은 다음과 같다.

JMeter 

 

Request Paramter

 
  


테스트 결과 보고서를 제공하는 JMeter의 기능 중 사용할 것을 정리했다.

 SplineVisualizer

 데이터 전송량을 그래프로 보여준다.

 View Results Tree

 각 요청건 별로 실제 송수신 데이터 보여준다. 

 Response Time Over Time

 응답시간별로 그래프 보여준다.

 Transaction Throughput vs Threads

 동시접속 사용자수에 따른 전송데이터량 

 Response Times vs Threads

 동시접속자수에 따른 응답시간의 변화 


아래는 추가로 JMeter Plugin 설치를 하여 사용할 수 있는 확장 기능을 정리했다.

 Response Times Disributions 

 x축 - 응답시간 인터벌,  y축 - 각 인터벌간 잡혀있는 샘플의 개수

 Active Threads Over Time Listener

 시간대별 살아있는 스레드의 개수

 Reponse Codes Per Second

 시간대별 Response Code 기록 (오류 발견시 아주 유용할듯 )

 Latencies Over Time

 Load Test시 Latency를 측정하는 그래프인데 별로 안좋은듯 피드백도 없고!

 Server Hits per Second

 Servers Hits 보여주는 그래프

 Bytes Throughput Over Time

 아주 중요한 그래프 (웹소켓 적용될지는 미지수)

 Composite Graph

 여러그래프를 함께 보여주도록 설정 가능



혹시 요청 url의 경우수가 많을 경우, WorkBench의 Http Proxy Server기능을 사용하여 요청 url을 레코딩할수가 있다. 


Thread Group에서의 설정값


아래는 Config Element에 잘 쓰는 놈중의 하나인 Counter 에 대한 설명이다.




아래는 ServerAgent 를 설치하여 cilent에서 서버의 cpu, memory usage 를 표로 보고 있는 그림




마지막으로 JMeter 사용시 주의사항이다.

Threads를 늘리거나 Listener를 많이 넣을 경우 메모리에 부하를 갈 수 있다. 모니터링 시간이 늘어나면 위험부담은 기하급수적으로 늘어나며 Heap 메모리 부족에러부터 다양한 리소스 부족 현상으로 빚어지는 에러로 에이징(장시간 부하)테스트등이 매끄럽게 진행이 되지 못한다.

그래서 해결방법은

리스너를 줄이거나 아니면 memory heap size를 많이 주는 것이다.

아래는 예제

Sometime I tune Jmeter options like:
JVM_ARGS="-Xms1024m -Xmx1024m -XX:+UseParallelGC -Xss1024k -XX:TenuredGenerationSizeIncrement=1m"


또하나는 Listener에 View Results Tree를 사용하지 말자!!! 기능테스트에서 사용하되, 부하테스트에서는 리소스가 없어 클라이언트가 먼저 리소스 다 잡아먹고 다운되버린다.

아래는 메뉴얼쪽 경고사항

18.3.6 View Results Tree

View Results Tree MUST NOT BE USED during load test as it consumes a lot of resources (memory and CPU). Use it only for either functional testing or during Test Plan debugging and Validation.



> Trouble Shoointg

테스트 중간에 Thread 개수가 많게 하여 테스트를 할 경우 Thread 개수가 증가하다가 나중에 그 개수가 점점 줄어들며 0으로 바뀌고 테스트가 종료가 되어야 

정확한 집계가 되는데 다음과 같이 Thread가 종료가 안되서 정확한 테스트 수치를 획득을 못할 경우가 있다. 

Q) i am running 100 threads concurrently for 5 mins using Jmeter 2.7 on website, once the execution duration is complete, it has to close all the running threads one by one and stop the execution completely, but Jmeter is left with few more threads(around 10-20 threads) without closing..

A)  

가능성 1 : those threads are still waiting on a response from the server

가능성 2 : This issue usually occurs when the requests to the application under test got high response times. The threads will be waiting for the pending response even after the specfied duration is elapsed. This can be avoided to an extent by allowing sufficient thread ramp down time or shut down time. Use Stepping thread group or ultimate thread group( these are JMeter plugins) to give an inclined ramp down instead of sudden shutdown as in normal thread group







Reference

1 : http://www.javaworld.com/javaworld/jw-07-2005/jw-0711-jmeter.html?page=1

2.  http://nico.vahlas.eu/2010/03/30/some-thoughts-on-stress-testing-web-applications-with-jmeter-part-2/

'IT > Tool' 카테고리의 다른 글

PowerShell 익숙해지기.  (0) 2015.03.03
Git  (0) 2013.04.01
캡쳐부터 자동 웹업로드되는 막강 툴! Cropper!  (0) 2013.03.25
JMeter - Java Request  (0) 2013.02.18
Posted by 억사마
IT/Tool2013. 2. 18. 14:35

Java Client 를 이용한 부하테스트를 위해서 JMeter 부하테스트 툴을 사용하기로 결정

  • 설치 프로그램

 프로그램

 설명

 Eclipse SDK

 소스 편집기 (텍스트 에디터도 무관) 

 Java Client 

 실제 부하 테스트 대상 클라이언트

 JMeter

 부하 테스트 툴 다운은 여기

 Maven

 실제 Exectuable Jar를 생성하기 위해Maven Assembly Plugin  사용

  • 셋팅
  1. JMeter 설치하고 나면 lib/ext 폴더에 D:\ide\apache-jmeter-2.9\lib\ext에 ApacheJMeter_core.jar, ApacheJMeter_java.jar 2개 파일들을 Client 단의 Class Path 설정 완료
  2. 실제로 테스트 코드가 들어갈 Class파일을 하나 만든다. 그 클래스는 org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient의 클래스를 상속받아야 한다. ( ApacheJMeter_core.jar, ApacheJMeter_java.jar 2개 사용됨)

  3. 상속을 아래하면 아래와 같이 소스를 개발하면 되는데 각 소스에 대한 설명이다. (출처)
    1) getDefaultParameters()

    This method is where you set parameters that you would like to get in JMeter Java Reqeust GUI. You do this by instantiating aorg.apache.jmeter.config.Arguments and calling its addArgument method for each parameter. For example:

    public Arguments getDefaultParameters() {
    Arguments args = new Arguments();
    args.addArgument("Service URL", "");
    args.addArgument("User Name", "");
    args.addArgument("Password", "");
    return args;
    }

    2) setupTest()

    Where you do any initialization (only once per thread) such as reading in the parameters, creating the Hessian proxy, etc. For example:

    public void setupTest(JavaSamplerContext context) {
    url = context.getParameter("Service URL");
    try {
    mySvc = (mySvcClassName)
    proxyFactory.create(mySvcClassName.class, url);
    } catch (Exception e) {
    e.printStackTrace();
    throw new RuntimeException("Error getting hessian proxy", e);
    }
    }

    3) runTest()

    JMeter will invoke it for each iteration of the test. This is where you would put code that invokes the service's methods and evaluate its result. The method returns a "org.apache.jmeter.samplers.SampleResult" object which is what you use to communicate the results to JMeter. For example:

    public SampleResult runTest(JavaSamplerContext context) {
    SampleResult result = new SampleResult();
    result.setSampleLabel("Call Hessian SVC");
    result.setDataType(SampleResult.TEXT);
    result.sampleStart();
    try {
    String custId = mySvc.authenticate(context.getParameter("User Name"), context.getParameter("Password"));
    if (custId == null) {
    result.setSuccessful(false);
    result.setResponseMessage("user authentication failed");
    result.setResponseData("Returned customer id is null".getBytes());
    }
    else {
    result.setSuccessful(true);
    result.setResponseCodeOK();
    result.setResponseMessage("Authentication successful");
    result.setResponseData(("customer id: " + custId).getBytes());
    }
    }
    catch (Throwable e) {
    StringWriter sw = new StringWriter();
    e.printStackTrace(new PrintWriter(sw));
    result.setSuccessful(false);
    result.setResponseMessage("Unexpected exception");
    result.setResponseData(sw.toString().getBytes());
    }

    result.sampleEnd();
    return result;
    }

    In the example above, the method setSuccessful indicates if the test passed or failed. The setting of the responseData is used for displaying whatever information you want in the response data tab of JMeter's "View Results Tree" listener.

    4) teardownTest()

    Where you do cleanup. Typically there is nothing you need to do here.

  4. 3번의 설명을 숙지하고 테스트 진행을 위한 테스트 코드를 삽입한다. 아래는 예제다.
    import org.apache.jmeter.config.Arguments;
    
    import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
    
    import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
    
    import org.apache.jmeter.samplers.SampleResult;
    
    import org.apache.jmeter.threads.JMeterContextService;
    
    import org.apache.jmeter.threads.JMeterVariables;
    
    
    
    
    
    public class JMeterTest extends AbstractJavaSamplerClient {
    
    
    
    
    
    	@Override
    
    	public SampleResult runTest(JavaSamplerContext arg0) {
    
    
    
    		JMeterVariables vars = JMeterContextService.getContext().getVariables();
    
    	    vars.put("demo", "demoVariableContent");
    
    	    
    
    	    System.out.println( " runTest() :: " +  arg0.getParameter("Service URL") );
    
    	    
    
    	    SampleResult sampleResult = new SampleResult();
    
    	    sampleResult.setSuccessful(true);
    
    	    sampleResult.setResponseCodeOK();
    
    	    sampleResult.setResponseMessageOK();
    
    	    return sampleResult;
    
    	}
    
    	
    
    	@Override
    
    	public Arguments getDefaultParameters() {
    
    
    
    		Arguments args = new Arguments();
    
    		
    
    		args.addArgument("Service URL", "127.0.0.1");
    
    		args.addArgument("Service IP", "8080");
    
    		args.addArgument("Service PORT", "8080");
    
    		args.addArgument("Call Count", "1000");
    
    		
    
    		//return super.getDefaultParameters();
    
    		return args;
    
    		
    
    	}
    
    	
    
    	@Override
    
    	public void setupTest(JavaSamplerContext context) {
    
    		// TODO Auto-generated method stub
    
    		//super.setupTest(context);
    
    		
    
    		String url = context.getParameter("Service URL");
    
    		System.out.println(url);
    
    		if(url.equals("127.0.0.1")) System.out.println("it's right!");
    
    		else System.out.println("It's wrong!");
    
    		
    
    	}
    
    	
    
    	@Override
    
    	public void teardownTest(JavaSamplerContext context) {
    
    		
    
    		System.out.println("It's all done~~ ");
    
    
    
    		super.teardownTest(context);
    
    	}
    
    	
    
    
    
    }
    

  5.  Exectuable Jar로 생성 (Maven Assembly Plugin 설명을 따라서 진행하면 간단히 생성 가능)
  6. 1)번 과정에서 생성된 jar를 jmeter의 lib하위 폴더에 넣고 bin\jmeter.bat를 실행시킨다.
  7. 아래 그림을 보면 Name하고 Comment는 원하는 테스트명을 넣고 ClassName이 중요하다 여기에서 내가 실행가능한 ClassName이 뜨면 된다.  

  8. 그러면 Thread Group 하위의 각종 보고 싶은 유형의 결과 리포트( Summary Report View Results in Tables등)의 유형을 선택하여 Run으로 돌리고 나서 결과 확인
  • 테스트 그럼 완ㄹ.


뱀다리) m2clipse와 cmd창에서 직접 실행시킨 maven하고 차이가 발생한다. 이유는 모르겠다. 

cmd창에서는 timeout이 계속 발생해서 dependency 라이브러리를 가져오지 못하고 

m2clipse는 문제가 없다. 이거 왜 이러지??!    다만.. 오류가 왕창 떨어질뿐..

아직도 메이븐 초보에서 벗어나긴 힘든가봐.










'IT > Tool' 카테고리의 다른 글

PowerShell 익숙해지기.  (0) 2015.03.03
Git  (0) 2013.04.01
캡쳐부터 자동 웹업로드되는 막강 툴! Cropper!  (0) 2013.03.25
JMeter  (0) 2013.02.26
Posted by 억사마