자바 성능 모니터링 도구
- profiling
- APM
- scouter (LG) : 제니퍼와 유사함 , 리얼타임
- pinpointer (Naver) : 사후 분석
서버의 성능은 ? - TPS
서버의 성능을 늘리려면 ? -> 서버를 늘린다! 단, 병목을 잡아줘야함 병목현상 -> 주로 CPU에서 발생함.
잘 설계된 서비스라면 DB에서 부하가 일어남
BCI - Byte Code Instrument
함수 전/후에 원하는 코드를 삽입하여 실행 시킬 수 있다 앞뒤로 성능 측정하는 코드를 넣고, 상태를 확인하는 식으로 구현한다. 프로파일 같은 경우 JVM을 변경하여 사용하기도 한다.
로그 - log
로그파일 (log file)
피크때는 몇기가씩 쌓이기도함. 서비스에 따라서 10분단위 / 시간단위 / 날짜단위로 파일을 저장한다 로그가 쌓이면 -> 디스크 풀 -> 망함!! (터미널도 접속못함) 디스크를 수시로 확인해야 한다 -> du / df 명령어를 통해서 디스크를 확인 로그는 요청이 나갈때 찍힌다
메모리/cpu등 어떤 문제가 생긴다!! -> L4 끊고 로그를 확인해봐야됨. ( 요청이 나갈때 처리되기 때문 ) 도저히 못찾으면? -> 밤마다 껏다키는 스크립트라도??
성능측정 - (각종 지표)
일반적인 데이터는 평균이나 중간값이나 비슷함. WAS응답속도의 경우 중간값이 더 크다.
분산, 표준편차가 크다 -> 응답 속도가 들쭉날쭉하다 95th, 99th -> 95%, 99%의 사용자는 어떤 성능을 보장한다는 의미로 사용함
Abstract ? Interfae?
Abstract (extends) 확장!
중간역할. 비슷한 코드가 여러번 나올때 그것을 모아서 구현해 놓고 사용
Interface (implements) 구현!
다중상속 불가능 함수를 반드시 구현해야한다. 내부를 모르더라도 그 기능을 하는 함수를 밖에서 사용 할 수 있게 . (User Interface처럼)
Abstract class | Interface |
1) Abstract class can have abstract and non-abstract methods. | Interface can have only abstract methods. Since Java 8, it can have default and static methods also. |
2) Abstract class doesn’t support multiple inheritance. | Interface supports multiple inheritance. |
3) Abstract class can have final, non-final, static and non-static variables. | Interface has only static and final variables. |
4) Abstract class can provide the implementation of interface. | Interface can’t provide the implementation of abstract class. |
5) The abstract keyword is used to declare abstract class. | The interface keyword is used to declare interface. |
6) Example: public abstract class Shape{ public abstract void draw(); } | Example: public interface Drawable{ void draw(); } |
Static
static 으로 선언된 변수는 Class에 하나다, WAS에 올릴 경우 이 데이터는 계속 쌓이게 되고 메모리 릭의 원인이 된다 - 조심해서쓰자
static block - 값을 초기화 할때 ( Map 같이 초기화할때 new 하고나서 값넣기 등 더해야 하는 경우)
public class StaticImportSample
{
static String rookie;
static Map\\<String,String\\> map
static {
rookie = "test"
map = new HashMap\\<String,String\\>();
map.put("key", "value");
}
}
Lambda
오라클 - **lambda Quick Start - **http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html#section1
package java.awt.event;
import java.util.EventListener;
public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e){
system.out.println(e.getSources());
{
}
인터페이스안에 메소드가 하나밖에 없는경우! 이렇게 Lambda 쓸 수 있음.
ActionListioner listener2 = e-\\> System.out.println(e.getSourcesI();
ActionListioner listener2 = e-\\> {
//여러줄 가능
System.out.println(e.getSourcesI());
};
Stream
public class Sample { public static void main(String[] argv) { List multiplesOf3 = new ArrayList<>(); for (long loop = 1; loop < 10; loop++) { multiplesOf3.add(loop); }
multiplesOf3.stream()
.filter(i-\> i%3==0 && i!=0)
.forEach(System.out::println);
} }
stream 으로 각종 다양한 일을 할 수 있다 .filter()
.sort()
.map()
…
자세한건 여기,,,. http://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.html
GC - garbage
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
필요없는것은 지워줘야함.
과정
- Marking
- Normal Deletion 2a : Deletion with Compacting
Generation Garbage Collection Process
hotspot Heap Structure
1. 처음에는 무조건 Eden 으로감 2. Eden 꽉차면 - 필요없는거 지우고 servivor copy - 한쪽으로만 모음 3. Eden 꽉차면 -\> 옮기고\, servivor 은 count 가 1씩 증가됨 .. 6, 늙은 애들(count > threshold) Tenured로 이동한다
young 쪽이 빠름! old쪽이 느림! young 쪽에서 쓸모없는거 지우고, 오래 살아 남은건 오래 살아남을 가능성이 높으니 더 보관하다
OOP
- http://www.javatpoint.com/java-oops-concepts - name convention / constructor / static 등 객체지향에 관한 다양한 concepts를 알 수 있음
'Programming > JAVA' 카테고리의 다른 글
jackson JSON 사용 중 UnrecognizedPropertyException 발생 시 (0) | 2017.03.27 |
---|---|
Spring 주기적으로 코드 실행하기 @Schedule (0) | 2017.03.24 |
java performance 자바 성능측정 (0) | 2017.03.23 |
Maven Profile 를 통해 설정 관리하기 (1) | 2017.03.23 |
spring mvc 에서 unit test 구현 (Controller, Service, DAO) (1) | 2017.03.23 |