전체 글121 JMX(Java Management eXtensions)와 VisualVM로 Heap Dump 들여다보기 JMX JMX(Java Management eXtentions)는 Java 응용프로그램의 모니터링과 관리기능을 제공한다. 웹사이트를 통해 원격의 Web Server, WAS, DB 등의 상태 모니터링, Start, Stop 등의 기능, 디바이스 상태, 각종 서비스제어 등의 기능을 제공할 수 있다. JMX 기술을 사용하여 리소스를 관리하려면 Java 프로그래밍 언어로 리소스를 관리해야 하는데, 리소스 관리 주체인 MBeans로 알려진 Java 객체를 사용하여 리소스를 관리한다. JMX MBean JMX의 MBean은 JMX Agent를 통해 관리되는 응용프로그램 또는 시스템 리소스이다. 표준 MBean은 XXXMBean이라는 Java 인터페이스와 해당 인터페이스를 구현하는 XXX라는 Java 클래스를 작성.. 2023. 7. 24. ConcurrentHashMap vs synchronized HashMap, ConcurrentHashMap 구현해보기 ConcurrentHashMap HashMap은 싱글스레드 환경에서 사용하는 것이 좋고, 멀티스레드 환경에서는 동기화 처리를 하지 않기 때문에 thread-safe하지 않다. 이 문제를 해결하기 위해서 Collections.synchronizedMap 메서드로 원본 Map을 변환하거나 HashTable 자료구조를 사용할 수 있지만 단일 잠금 객체를 사용하기 때문에 이러한 배타적 접근방식은 성능저하를 일으킬 수 있다. 즉, 높은 동시성 하에 수많은 처리량으로 thread-safe를 원한다면, 이러한 구현은 해결책이 되지 못한다. 이러한 동기화 문제를 보완하기 위해서 Java 1.5에서 ConcurrentMap이 도입되었다. 동기화 처리를 할 때, 어떤 Entry를 조작하는 경우에 해당 Entry에 대해서만.. 2023. 7. 24. 스레드 동기화를 위한 volatile, Atomic volatile 하나의 변수를 여러 스레드에서 사용할 때 사용하는 키워드로 변수를 CPU 캐시가 아닌 Main Memory에서 변수의 값을 읽거나 저장하겠다라는 것을 명시하는 것이다. 즉, volatile은 CPU Cache에 저장된 값을 읽는 것 보다는 성능이 안좋지만 컴파일러에게 해당 데이터(변수, 메서드)에 대해 멀티스레드로 접근하고 있음을 알려주어 읽기, 쓰기에 대해서 동기화를 보장하여 예측불허하게 바뀌는 것을 막을 수 있다. synchronized와의 차이는 다음과 같다. synchronized: 행위(메서드 및 블럭)에 대한 동기화 volatile: 행위의 타겟(변수)에 대한 동기화 volatile을 사용하는 이유는 Main Memory의 값을 읽고 저장해 가시성을 보장하기 위한 것이라고 할 .. 2023. 7. 22. Thread 클래스(with synchronized) Thread 우리가 JVM을 실행시키면 자바 프로세스(Java Process)가 시작한다. 이 프로세스에는 여러 개의 스레드가 수행되는데 반대로 여러 프로세스가 공유하는 하나의 스레드가 수행되는 일은 절대 없다. 어떤 프로세스든 간에 스레드가 하나 이상 수행된다. 프로세스(Process): 운영체제로부터 시스템 자원을 할당받아 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체) 스레드(Thread): 프로세스가 할당받은 자원을 이용하는 실행의 단위 이 때, Java Thread는 일반 스레드와 거의 차이가 없으며, JVM이 운영체제의 역할을 한다. 즉, Java Thread는 JVM에 의해 스케되는 실행 단위 코드 블록이라고 할 수 있고, 스레드 스케줄링 및 스레드와 관련된 많은 정보들을 .. 2023. 7. 22. Scale up vs Scale out Scale up vs Scale out Scale up Scale up은 서버 그 자체를 증강시켜 처리 능력을 향상시키는 것을 말한다. 다른 말로 수직 스케일이라고도 한다. 장점 구축, 설계가 쉽다. 컨트롤러나 네트워크 인프라 비용은 별도로 발생하지 않는다. 단점 스토리지 컨트롤러 확장성 한계 용량, 성능 확장 제한 비싸다. 트래픽 부하로 인한 장애 영향도 up 대표적 예로 cpu i3 -> i5 가는 경우 6만원 차이로 성능 향상 1.5배 정도 향상한다. 하지만 i5 -> i7 가는 경우에는 20만원 차이임에도 1.2 ~ 1.3배 정도가 향상한다고 한다. 주요 기술 고성능 CPU Memory 확장 SSD Scale up이 쓰이면 좋은 경우 정합성 유지가 어려운 경우 OLTP(온라인 트랜잭션 처리) - .. 2023. 7. 18. 스핀락(spinlock), 뮤텍스(mutex), 세마포(semaphore) (feat. 동기화(synchronization)) 동기화(Synchronization) 하나의 객체를 두 개의 스레드가 접근하면 어떻게 될까? 왜 동기화가 중요한지에 대해서 살펴보고, 동기화를 하지 않으면 어떤 문제가 발생하는지에 대해서 살펴보자. 상한 귤 세기 예제 public class Counter { private int state = 0; public void increment() { state++; } public int get() { return state; } } for (귤 in 귤박스) { if (귤 상태 is 불량) { badCounter.increment(); } } 귤박스가 2개 있다고 가정하고 T1, T2 스레드를 사용하여 한 스레드당 하나씩 담당하게 만들었다. CPU가 싱글 코어일 때 T1, T2 스레드는 멀티태스킹 방식(다수.. 2023. 7. 18. blocking I/O vs non-blocking I/O (feat. socket I/O) I/O I/O는 input/output의 약자로, 데이터의 입출력을 의미한다. 이러한 I/O의 종류에는 일반적으로 우리가 알고 있는 file I/O, 프로세스 간의 통신을 할 때 사용되는 pipe I/O이 있다. 그리고 일반적인 디바이스(모니터, 키보드 등)에 대한 device I/O이 있고, network(Socket) I/O에 대해서는 뒤에서 자세히 살펴보자. I/O 란? 컴퓨터는 크게 2가지 역할을 수행한다고 볼 수 있는데 하나는 연산(computing)이고, 하나는 I/O 즉, 입출력을 처리하는 것이다. 컴퓨터에서 운영체제는 이러한 입출력에 대한 수행과 물리적인 입출력 장치(하드웨어)를 관리하고 컨트롤해주고 있다. 이러한 I/O 요청이 처리되는 과정을 하나씩 알아보자. 사용자 프로세스는 열고 있던.. 2023. 7. 17. GC(Garbage Collection), GC는 어떻게 대상 선정할까? Garbage Collection(가비지 컬렉션) 프로그램을 개발하다 보면 유효하지 않은 메모리인 가비지(Garbage)가 발생하게 된다. C언어를 이용하면 free()라는 함수를 통해 직접 메모리를 해제해주어야 하지만 Java나 JavaScript을 이용해 개발을 하다보면 개발자가 메모리를 직접 해제해주는 일은 없다. 그 이유는 JVM의 Garbage Collector가 프로그램이 동적으로 할당했던 메모리 영역 중 불필요한 메모리를 알아서 정리(해제)해주기 때문이다. 여기서 동적으로 할당했던 메모리 영역은 프로그램 런타임에 사용되는 Heap 메모리 영역을 뜻하고, 불필요한 영역은 어떤 변수도 가리키지 않게 된 영역을 의미한다. 장점 이렇게 GC를 도입하면 수동으로 메모리를 관리하던 것에서 비롯된 에러들.. 2023. 7. 17. Java의 소수점 계산 오류 및 해결 소수점 계산 public class Calculate { public static void main(String[] args) { System.out.println(0.1 + 0.2); // 0.30000000000000004 } } console.log(0.1 + 0.2); // 0.30000000000000004 프로그래밍에서 소수점 계산은 흔한 일이다. 우리 실생활에서 소수점을 계산해야 하는 경우가 많고, 달러로 계산할 때에도 소수점 계산은 흔히 사용된다. 그 때 만약 0.1 + 0.2와 같은 소수점 계산에서 0.30000000000000004로 결과가 나와 계산이 틀리게 되면 큰 문제가 발생할 수도 있다. 왜 0.1 + 0.2 계산에서 0.3이 아닌 0.30000000000000004이 나왔을까?.. 2023. 7. 16. 이전 1 ··· 7 8 9 10 11 12 13 14 다음