일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문제풀이
- programmers
- 코드워
- 주키퍼
- 동적프로그래밍
- zookeeper
- leetcode
- Go언어
- boj
- HBase
- docker
- 스칼라
- golang
- Python
- Java
- 자바
- gradle
- 파이썬
- 알고리즘
- 프로그래머스
- scala
- go
- codewars
- dynamic programming
- redis
- DP
- Linux
- OOM
- 튜토리얼
- 리눅스
- Today
- Total
목록TIL (28)
파이문
github action 이란? github action 은 github 가 제공하는 CI/CD 플랫폼이라고 볼 수 있다. 보통 현업에서 빌드/배포를 진행할 때 별도의 서버를 두고 작업을 하곤 한다. (이 때 두는 서버는 물리 서버일 수도 있고 가상 서버일 수도 있다.) github action 이 다른 CI/CD (예를 들면 젠킨스) 와 다른 강력한 장점은 바로 트리거 기능이라고 생각한다. (어디까지나 주관적인 의견입니다.) github 에 hook 을 걸어, push event 를 다른 툴에서 체킹을 하고 빌드가 자동으로 이루어지는데 github action 을 사용하면 yml 로 간편하게 이러한 작업을 할 수 있다. 또한 여러가지 action 들을 사용하여 CI/CD 작업 (이를 Workflow 라..
목적 도커 컨테이너 어플리케이션을 호스트 머신의 유저로 실행하기 이유 도커 컨테이너의 스프링 부트에서 로그를 호스트 머신의 디렉토리에 남기고 싶었다. 그리고 호스트 머신 유저랑 어플리케이션 유저가 항상 같다는 전제가 있음! 디렉토리 마운트 디렉토리를 rw 로 마운트 하였지만, (어플리케이션 로그는 작성이 되고) 톰캣 access log 는 Permission denied 가 떴다. 디렉토리의 권한을 변경하면 해결되는 문제였지만, 777 은 뭔가 꺼려졌다. priviledged 보안상 사용을 지양하고 있다. 호스트 머신의 유저로 실행하기 리서치 한 방법으로는 2가지 방법이 있다. 도커 이미지 실행 시 호스트의 유저 정보로 실행하기 도커 이미지 빌드 시 호스트의 유저 정보와 동일하게 추가하고 어플리케이션을 ..
😀 0. 프로세스가 죽었다 서버의 프로세스가 메모리 부족으로 kill 되었다는 알람이 왔다. kernel: Out of memory: Kill process () score or sacrifice child 최근 서버에 서비스 몇 개를 더 띄웠는데, 그것 때문에 일어난 영향으로 보였다. 짧은 식견으로는 새로 올린 서비스가 메모리를 많이 잡아먹었고, 그렇기 때문에 새로 올린 서비스가 죽어야 한다고 생각했다. 그러나 실제로 죽은 프로세스는 HBase 의 RegionServer 였다. 확인해보니 HBase RegionServer 의 oom_score 가 더 높았었기 때문이었다. oom_score 는 여기서 짧게 작성한 적이 있는데, 쉽게 말하면 서버의 메모리가 부족할 때 oom_score 가 높은 프로세스가 ..
동일한 Column Qualifier 에서 (이를 'A' 라고 하겠다.) 조건 여러개를 OR 로 필터 하고 싶었다. 예시로 보자면 A 가 1 인 경우 또는 2인 경우를 스캔하고 싶어, 다음과 같이 작성하였다. (실제로는 Byte 값이 들어간다.) Scan scan = new Scan(); FilterList filterList = new FilterList(); SingleColumnValueFilter aIsOne = new SingleColumnValueFilter( 'CF', 'A', CompareFilter.CompareOp.EQUAL, 1 ); SingleColumnValueFilter aIsTwo = new SingleColumnValueFilter( 'CF', 'A', CompareFilte..
프로세스는 커널에게 필요한 만큼의 메모리를 요청하고 커널은 메모리 영역을 프로세스에게 주지만, 실제로는 할당은 하지 않고 해당 영역을 프로세스에게 주었다는 것을 저장해 둔다. 이 과정을 Memory commit 이라고 부른다. Memory commit 이 필요한 이유가장 큰 이유는 fork() 와 같은 프로세스를 생성하는 시스템 콜을 처리할 수 있어야 하기 때문이다. 예를 들면 물리 메모리가 4기가 일 때, 3기가 프로세스 A가 돌고 있다고 해 보자. 해당 프로세스가 자식 프로세스 B를 생성하게 (fork) 되면 자식 프로세스 B는 부모 프로세스 A와 마찬가지로 3기가 프로세스일 것이다. 하지만 이미 전체 메모리 4기가에서 3기가를 부모 프로세스 A 가 사용하고 있기 때문에 가용 메모리는 1기가 밖에 되..
docker container log가 계속 쌓여서 disk full 이 났다. 그래서 도커 컨테이너 내부 로그를 삭제 해야 했다. 스크립트로 만들기 도커 컨테이너 로그를 삭제하는 script를 만들었었다. 스크립트 예시 #!/bin/sh CONTAINER=$1 LOG=$(docker inspect --format='{{.LogPath}}' "$CONTAINER") echo "LogPath:" $LOG echo "Ary you sure clear the all $CONTAINER logs? [y|n]" read answer if [[ $answer == "y" ]]; then echo "Clear Logs!" truncate -s 0 "$LOG" fi echo "Done" 인자 값에는 container ..
gradle-ssh-plugin 문서: gradle-ssh-plugin.github.io/docs/ 저장소: github.com/int128/gradle-ssh-plugin 해당 플러그인의 장점은 병렬로 실행 된다는 것 정도 ssh example session 은 병렬로 실행 되기 때문에 아래와 같은 경우 web01, web02 가 병렬로 실행된다. 순차적으로 실행하길 원하면 ssh.runInOrder 를 사용할 것 ssh.run { session(remotes.web01) { execute 'command1' } session(remotes.web02) { execute 'command2' } } session 함수 안에서 사용하는 객체는 Remote 라는 클래스 객체로 같은 사람이 개발한 groovy..
gradle 빌드 시에 다음 에러 등장 Exception in thread "main" java.net.ConnectException: Connection refused (Connection refused)... 사용하고 있는 컨테이너 (또는 서버) 에서 gradle-bin-xxx 을 다운로드 받지 못하는 상황이었음 (Connection refused) 그런데 로컬 환경에서 다운로드 시에는 잘 됨 gradle 빌드 시에만 안되는 것이였음 이럴 경우 proxy 설정을 의심해 볼 수 있다. (서버에서 외부 리소스 다운로드를 막아두었던지 하는 등의 이슈) 2가지 방법이 있는데 gradle.properties 를 수정하는 방법 또는 gradlew 에서 JVM Option 을 수정하는 방법이 있다. 두개가 서로 ..
상황 git rm /path/to/file git commit -m "Delete wrong file" . git push git rm (--cached 없이) 으로 파일을 삭제하고 커밋하고 push 까지 해 버림 (...) (원래는 git mv 로 파일을 변경했는데 source 파일을 삭제 안하고 target 파일을 삭제했다는 TMI) 목표 이 때 잘못 삭제한 파일을 복구하고 싶었다. Example git version < 2.23 # 복구할 version 확인하기 $ git log # version 으로 이동 $ git reset # 삭제한 파일을 다시 가져온다 $ git checkout -- /path/to/file # 다시 커밋함 $ git commit -m "Fix" /path/to/file #..
curl 로 특정 URL 을 요청할 일이 있어서 해보다가 request, response 시간을 자세히 측정할 수는 없는걸까? 하다가 찾아보았다. 1. curl-format.txt 란 파일을 생성하고 아래의 내용을 입력한다. time_namelookup: %{time_namelookup}s\n time_connect: %{time_connect}s\n time_appconnect: %{time_appconnect}s\n time_pretransfer: %{time_pretransfer}s\n time_redirect: %{time_redirect}s\n time_starttransfer: %{time_starttransfer}s\n ----------\n time_total: %{time_total}s\..