일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- HBase
- 프로그래머스
- gradle
- 동적프로그래밍
- go
- golang
- codewars
- Python
- 파이썬
- OOM
- Java
- leetcode
- docker
- scala
- 리눅스
- dynamic programming
- boj
- 코드워
- redis
- 주키퍼
- Linux
- 자바
- Go언어
- 알고리즘
- 튜토리얼
- zookeeper
- 문제풀이
- 스칼라
- DP
- programmers
- Today
- Total
목록TIL (28)
파이문
ExecutorService 를 사용하여 멀티 쓰레드로 컨슈머를 개발하였다. 컨슈머는 RPS 를 지켜야 하는 룰이 있어서, Apache 의 TimedSemaphore 를 사용하였다. 멀티 쓰레드로 돌리는 작업이 완료가 되면 프로세스가 종료 되게끔 만들었으나 종료 되지 않았다. shutdown 을 하였는데 왜 종료가 되지 않는 것인지 엄청 삽질을 했다. 사실 ExecutorService 의 shutdown 메서드 자체가 반드시 쓰레드를 종료 시킨다는 보장은 없다. (ExecutorService shutdown not working 이 구글 서제스트로 있을 정도이다.) 그래서 처음엔 개발을 잘못해서, 쓰레드로 만든 코드에 버그가 있어서 shutdown 으로 종료가 보장이 안되어 shutdownNow 를 호출..
자바로 Producer-Consumer 개발을 진행하고 있었다. Producer 에서 더 이상 Queue 에 집어 넣을 데이터가 없는 경우 POISON 이라고 명명한 임의의 객체를 Queue 에 넣게 하였고, Consumer 에서 Queue 에서 꺼낸 데이터가 POISON 일 경우 종료 되게 만들었다. (Producer-Consumer 의 run 은 while loop 로 돌아가고 있었다.) single producer, single consumer 일 때는 잘 동작하였다. 그러나 producer 개수가 consumer 보다 적은 경우는 예상대로 종료 되지 않았다. 당연하겠지만 producer 개수 만큼 queue 에 POISON 이 들어갔기 때문에, 나머지 consumer 들은 해당 (producer)..
HBase 를 대상으로 MR 어플리케이션을 개발할 때 TableMapper / TableReducer 를 사용할 때가 있다. 이 때 TableReducer 를 사용해서 데이터를 써야 하는데, 데이터를 각각 다른 테이블에 저장해야 했다. TableMapReduceUtil 를 사용하면 하나의 테이블에 쓰는 것 밖에 안된다. 그래서 서로 다른 테이블에 데이터를 넣으려면 (TableReducer 를 상속받은) Reducer에서 아래 처럼 해 주고 Put put1 = createPut(...); context.write(new ImmutableBytesWritable(Bytes.toBytes("table1")), put1); Put put2 = createPut(...); context.write(new Immu..
맥북에서 셸 업그레이드 후 zsh 가 안되는 문제 bash, zsh 를 업그레이드 하고 zshrc 를 사용하려고 아래 처럼 명령어를 쳤었다. $ source ~/.zshrc 그런데 아래 처럼 에러가 났음 -bash: autoload: command not found -bash: /path/to/.oh-my-zsh/oh-my-zsh.sh: line 34: syntax error near unexpected token `(' -bash: /path/to/.oh-my-zsh/oh-my-zsh.sh: line 34: `for config_file ($ZSH/lib/*.zsh); do' 알고보니 셸을 업그레이드 하는 와 중에 bash 로 기본 셸을 변경했었던 것이다 (바보!) 다시 원복하는 과정을 진행해보자. z..
자바로 코드를 작성할 때 gracefully 하게 종료하기 위해 ShutdownHook 을 사용하곤 한다. Runtime.getRuntime().addShutdownHook(new Thread(() -> { ... })); 프로세스를 중지하는 시나리오가 잘 있으면 좋겠지만, 강제 종료할 경우도 꽤 있을 것이다. 강제 종료의 경우 인터럽트 시그널인 kill -9 를 자주 썼었다. (각 시그널 번호가 뜻하는 의미는 인터넷에 매우 많으니 패스) SIGKILL (kill -9) 를 해도 ShutdownHook 이 되는지가 궁금했는데 결론부터 말하자면 안된다. 만약 프로세스 ShutdownHook 이 동작하게 하고 싶다면 SIGTERM(15)을 사용하도록 하자. (참고로 SIGINT(2) 도 된다. 인텔리제이에서..
왜 레디스는 싱글쓰레드로 되어 있을까? 프로그래밍이 쉽다. 동시성에서 도움이 된다. (동시성과 병렬성은 다르다!) CPU 가 보틀넥이 아니다. 비용이 효율적이다. 레디스가 싱글 쓰레드인데 어떻게 동시에 접근하지? 우선 동시성에 의미를 다시 생각해봐야 한다. 서버에서 동시성과 병렬성은 다른 컨셉을 갖고 있다. 서버에서 동시성 I/O 를 지원한다는 의미는 하나의 계산 단위만을 가진 클라이언트가 여러 흐름을 실행함으로써, 서버가 여러개의 클라이언트에 서비스를 제공할 수 있다는 의미이다. 병렬은 서버가 여러가지 일을 동시에 할 수 있다는 것이다. 예를 들면 바텐더 여러 고객들을 보고 하나의 음료만 만든다는 것은 동시성은 갖고 있지만 병렬성은 없다는 것이다. 참고 - stackoverflow.com/questio..
hbase 테이블 별 용량 확인하기 path 는 기본적으로 zookeeper base path 이다. (변경되었다면 hbase master status 웹 UI 에서 확인할 수 있고 본인이 임의로 변경했다면 사용자가 당연히 알겠지?) 기본은 /hbase/data/default 이다. hdfs dfs -du -h /hbase/data/default
메모리 부족 swap 물리 메모리가 부족하게 되면 가상 메모리 방식을 응용한 'swap' 이 일어난다. 스왑은 저장 장치의 일부를 일시적으로 메모리 대신 사용하는 방식이다. 당연한 것이겠지만 메모리 보다 저장 장치에 접근하는 속도가 현저히 느리다. 그래서 시스템이 일시적인게 아니라 만성적으로 메모리가 부족하게 되면 스와핑 / 스왑 인 (스왑 영역을 물리 메모리 영역 으로 되돌리는 것) 과 스왑 아웃 (물리 메모리 영역을 스왑 영역으로) 이 반복되는 스래싱 (thrashing) 상태가 일어난다. 리눅스에서는 스와핑을 페이징이라고 부르기도 한다. 스와핑이 일어나지 않게 하기 (스왑으로 인해 일어나는 성능 하락을 막게 하기 위해) 위해서 아예 스와핑 옵션을 끌 수도 있다. 이 때 사용하는 값이 vm.swapp..
리눅스에서 쓰레드 몇 개 까지 만들 수 있을까? 궁금해서 찾아보았다. cat /proc/sys/kernel/threads-max 로 확인할 수 있다고 한다. (근데 여기서 말하는 결과 값은 결국 결국 쓰레드 + 프로세스 의 의미라고 한다.) 참고 stackoverflow.com/questions/344203/maximum-number-of-threads-per-process-in-linux
서버에 환경 설정 배포할 일이 있는데 그동안 ssh 나 fabric 이나 이런것들로만 하다가 ansible 을 써보기로 했다. (ansible 1일차) test 란 유저로 /path/to/test 란 디렉토리를 생성하는 예제이다. (become 옵션을 yes 로 하면 sudo 권한을 준 것과 같다.) # # # 디렉토리 생성 예제 # # - hosts: tester remote_user: test tasks: - name: Create a test1 directory if it does not exist become: yes file: owner: test group: test path: /path/to/test1 state: directory mode: 0755 hosts 란 키 값에 tester 를 ..