lecture 2. 멀티 스레드 프로그램 구성
2023. 8. 17. 01:30
lecture/Java 멀티스레딩, 병행성 및 성능 최적화
Runnable 인터페이스로 다른 스레드에서 코드를 실행하는 방법과 진해지는 정도의 수준. 그리고 스레드 클래스의 유용한 기능을 알아보고 IDE를 사용해 스레드를 디버그 하는 법도 해볼게요. 1. 스레드 생성하는 방법 Java 에서는 JDK 가 모든 스레드의 관련 속성과 메서드를 스레드 클래스로 압축합니다. 그래서 새 스레드를 만들려면 새 스레드 객체부터 생성해야하죠!! 스레드 객체 자체는 기본적으로 비어있스빈다. 그러니 runnable 인터페이스를 구현하는 클래스의 객체를 해당 생성자에 전달해야합니다. run 메서드에 어떤 코드를 넣든 운영 체제가 스케줄링하자마자 새 스레드에서 실행될 겁니다. 자바 8부터는 람다로 줄일수 있죠?!?! 스레드 객체에서 start 메서드를 호출해 스레드를 시작해야합니다. ..
lecture 1. 스레딩 기초
2023. 8. 17. 00:38
lecture/Java 멀티스레딩, 병행성 및 성능 최적화
스택(stack) 은 메모리영역으로 지역 변수가 저장되고 기능이 실행되는 영역입니다. 그리고 명령어 포인터는 그냥 포인터 일뿐입니다. 스레드가 실행할 다음 명령어의 주소를 가리키느 역할을 한다. 왜 각각의 스레드가 자체 스택과 명령어 포인트를 가지는지 쉽게 이해하려면 각각의 스레드는 특정 순간에 서로 다른 함수를 이용해 다른 명령을 수행한다는것만 기억하자. 컨텍스 스위치 하나의 스레드 실행을 멈추고 다른 스레드를 스케줄링한 다음 다시 실행하는것이 컨텍스 스위치입니다. 동시에 많은 스레드를 다룰 때는 효율성이 떨어지기 때문입니다. 이것이 병행성을 위한 대가입니다. 우리가 생각을 가다듬고 집중력을 회복하는 시간과 똑같습니다. 집이나 직장에서 여러 일을 동시에 하면 생산성이 떨이지게 됩니다. 주변의 뱅하는 받..
nohup으로 실행한 키바나 종료 방법
2023. 8. 3. 13:55
kibana
원래는 ps -ef |grep kibana 로 찾아서 kill -9 pid 를 사용했는데 nohup.out으로 실행을 하니 원래 하던 방식으로는 재실행 혹은 종료가 되지 않아서 다른 방법을 찾아보니 밑에 처럼 삭제 하는 방법을 찾았습니다. Answer: netstat -pln | grep 5601 then you can get the process id and kill -9 13304식으로 지우면 됩니다.
엘라스틱서치 샤드 재배치 (elasticsearch Shard relocation)
2023. 8. 3. 10:14
Elasticsearch
엘라스틱서치 버전 7.12 입니다. Elasticsearch의 샤드 재배치는 클러스터 내의 한 노드에서 다른 노드로 샤드(인덱스 파티션)를 이동하는 프로세스입니다. 샤드 재배치는 종종 노드 간 데이터 분포의 균형을 맞추거나 클러스터 성능을 최적화하기 위해 수행됩니다. 다음은 Elasticsearch에서 샤드 재배치를 수행하는 단계입니다. 클러스터 상태 확인 : 샤드 재배치를 수행하기 전에 Elasticsearch 클러스터의 상태를 확인하는 것이 중요합니다. 다음 명령을 실행하여 이를 수행할 수 있습니다. curl -X GET "http://localhost:9200/_cluster/health" 샤드 재배치를 진행하기 전에 클러스터 상태가 녹색 또는 노란색인지 확인하십시오. Enable Shard All..
멀티프로세싱과 멀티스레딩, 그리고 IPC
2023. 6. 1. 00:35
lecture
멀티프로세싱은 여러 개의 '프로세스' 즉 동시에 2가지 이상의 일을 수행 할 수 있는것을 말합니다. 이를 통해 하나 이상의 일을 병렬로 처리할 수 있으며 특정 프로세스의 메모리, 프로레스 중 일부에 문제가 발생되더라도 다른 프로세스를 이용해 처리할 수 있으므로 신뢰성이 높은 강점이 있습니다. 멀티스레딩 이란 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높습니다. 예를 들어 웹 요청을 처리할 때 새 프로세스를 생성하는 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비하여, 한 스레드가 중단(blocked)되어도 다른 스레드는 실행(running)상태일 수 잇기 때문에 중단되지 않은 빠른 처리가 가능합니다. 또한, 동시성..
동기화 기법 -세마포어
2023. 6. 1. 00:02
lecture
동기화(Synchronization)가 필요한 이유 두 개의 프로세스가 동일한 공유된 메모리에 접근. - 프로세스는 서로 협동하여 규칙을 준수하며 사용 해야 한다. - 잘못된 연산을 없애고 일관성을 보장해야 한다. 응용프로그램에서 동기화 방식 Semaphore MUTEX Condition Variable T2 -> T3 순이다. - 우선순위는 T3 ->T2 ->T1 순이다. - 초기화 된 세마포어 변수 sem을 T1, T2, T3 각 3개의 스레드가 잠그려 하는 상황이다. - 세마포어를 잠글 때에는 sem_wait() 함수를, 풀어줄 때에는 sem_post() 함수를 사용한다. - T1이 sem을 잠그면서 sem의 count를 하나 감소시킨다. count가 0이 되면 이후 이 세마포어를 잠그려는 스레드는..
ArrayList 와 LinkedList 의 차이점
2023. 5. 12. 00:46
Language/Java
빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보단 LinkedList를 사용하는것이 좋다. 그러나 인덱스 검색이나, 맨 마지막에 객체를 추가하는 경우에는 arrayList가 더 좋은 성능을 발휘한다. ArrayList에 객체를 추가하면 인덱스 0부터 차례대로 저장된다, 또한 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 밀려난다. ArrayList를 생성하고 런타임 시 필요에 의해 객체들을 추가하는 것이 일반적이지만, 고정된 객체들로 구성된 List를 생성할때도 있다. 이런 경우에는 Arrays.asList(T...a)메소드를 사용하는 것이 간편하다. √ List list = Arrays.asList(T...a) T타입 파라미터에 맞게 asList(..
자바에서 병렬(parallel) 처리란?
2023. 5. 10. 23:23
Language/Java
병렬(parallel) 처리란 한가지 작업을 서브 작업으로 나누고, 서브 작업들을 분리된 스레드에서 병렬적으로 처리하는 것을 말한다. 병렬 처리 스트림을 이용하면 런타임 시 하나의 작업을 서브 작업으로 자동으로 나누고, 서브 작업의 결과를 자동으로 결합해서 최종 결과물을 생성한다. 예를 들어 컬렉션의 요소 총합을 구할 때 순차 처리 스트림은 하나의 스레드가 요소들을 순차적으로 읽어 합을 구하지만, 병렬 처리 스트림을 이용하면 여러 개의 스레드가 요소들을 부분적으로 합하고 이 부분합을 최종 결합해서 전체 합을 생성합니다. 다음 예제를 보시면 순차 처리 스트림과 병렬 처리 스트림을 이용하여 사용된 스레드의 이름이 무엇인지 콘솔에 출력하여 보여드리겠습니다. public class parallel { publi..
Elasticsearch - node repurpose tool to clean up
2023. 2. 27. 10:11
Elasticsearch
elasticsearch-node repurpose tool to clean up 이라는 문구와 함께 엘라스틱서치가 실행이 안되는 경우도 가끔 있습니다. 일단 elasticsearch.yml 에서 node.roles: ["master"] 로만 구성이 되어있으면 이런 밑에 오류 구문이 나옵니다. java.lang.IllegalStateException: node does not have the data role but has shard data 에러가 발생하게 되는데요. 이를 해석해보면, Data 역할을 받지 않았는데, 샤드 데이터를 가지고 있다는 에러 메시지입니다. 해결방법 ./bin/elasticsearch-node repurpose 명령어를 쳐 주면 이러한 구문 이 나옵니다. 저는 Y를 눌러서 진행해..
elasticsearch 클러스터간 검색
2023. 2. 25. 17:39
Elasticsearch
안녕하세요, 오늘은 엘라스틱서치에서 클러스터간의 검색을 알아보려고합니다. 전제 조건 클러스터간 검색에는 원격 클러스터가 필요합니다. 로컬 조정 노드에서 cluster_remote_client 노드 역할이 필요합니다. cluster_remote_{remote이름}.seeds:["192.168.0.201:9200"] 서버 43번 Elasticsearch.yml 에 추가할 내용 node.roles:[master,remote_cluster_client] search.remote.connect:true Cluster_remote_named.seeds:["192.168.0.201:9200"] 서버 46번 Elasticsearch.yml 에 추가할 내용 search.remote.connect:true Cluster_..