본문 바로가기

Old Posts226

[Linux] CentOS 6,7,8 지원 종료 및 CentOS Stream 소개 CentOS는 'Community Enterprise Operating System'의 약자로 RHEL(RedHat Enterprise Linux)를 완벽하게 호환하는 오픈소스 리눅스 프로젝트다. RHEL의 안정성을 그대로 가져오면서도 무료로 사용할 수 있어 수 많은 개발환경과 서비스 환경에 설치되어 사용되고 있다. CentOS는 독립적인 오픈소스 프로젝트로 운영되어 오다가 2014년 RedHat에 인수된다. 상용 리눅스 RHEL을 만드는 RedHat에 인수되면서 CentOS가 언젠가는 서비스 종료되는게 아니냐는 우려가 있었는데 결국 2020년 CentOS의 서비스 정책이 변경되었다. 이제 CentOS 6, CentOS 7, CentOS 8 같은 버전들의 배포판은 사라지고 CentOS Stream이라는 .. 2022. 5. 25.
[Linux] OOM Killer 소개 및 사용법 OOM은 Out Of Memory의 약자로 직역하면 메모리 부족이다. 애플리케이션이 서버에서 동작하면서 대량의 메모리를 이용하게 될 경우 시스템 메모리가 부족해질 수 있다. 그러면 운영체제의 설정에 따라 대량의 메모리를 사용하는 애플리케이션이 강제로 종료될 수 있다. OOM Killer 시스템 메모리가 부족해지면 리눅스 커널은 시스템의 정상적인 동작을 보장하기 위해 메모리를 흥청망청쓰는 애플리케이션을 강제 종료하게 된다. 리눅스 커널이 메모리를 확보하기 위해 실행하는게 OOM Killer다 OOM Killer는 점수를 매겨 가장 높은 점수를 받은 프로세스부터 강제 종료한다. 이를 OOM Scoring이라고 한다. 특정 프로세스의 OOM Killer 점수는 /proc/${pid}/oom_score 파일을 .. 2022. 5. 23.
[Java] 메모리 가시성(Visibility) 소스코드의 특정 블럭을 동기화시키고자 할 때, 항상 메모리 가시성(Memory Visibility) 문제가 발생한다. 특정 변수의 값을 사용하고 있을 때 다른 스레드가 그 변수의 값에 접근하지 못하도록 막아야 하는 ‘상호배제’도 중요하지만 값을 수정한 다음 동기화 블록을 빠져나가고 나면 다른 스레드가 변경된 값을 즉시 사용할 수 있어야 하는 ‘가시성(Visibility)’도 중요하다. 메모리 가시성(Memory Visibility) 싱글 스레드 환경에서는 프로그램의 코드가 특정 변수에 값을 수정한 다음 다시 그 변수의 값에 접근해보면 이전에 수정한 값을 다시 가져올 수 있다. 멀티 스레드 환경에서는 반드시 수정한 값을 읽는 것이 보장되지는 않는다. 공유 변수에 대해서 어떤 스레드가 값을 수정했을 때, 그.. 2022. 5. 15.
[Linux] rlogin 명령어 설치 및 사용법 rlogin은 Remote Login의 약자로 호스트에 원격으로 로그인할 때 사용하는 명령이다. 호스트로 로그인 할 때, 아이디와 패스워드 등을 이용하는게 아닌 IP나 도메인 이름을 이용해 신뢰 관계를 맺는다. 특정 호스트에서 편하게 원격 로그인을 할 수 있지만 ip spoofing에 취약하다. rlogin을 비롯한 rsh, rcp 같은 r-계열의 명령에서는 두 호스트가 신뢰하고 있다는 것을 /etc/hosts.equiv, $HOME/.rhosts 등에 정보를 기록해 두는 것으로 표현한다. (/etc/hosts.equiv는 시스템 전체에 영향을 주는 파일이고, $HOME/.rhost 는 각 사용자별로 설정하는 파일이다) rlogin, rsh 설치 및 설정 $ sudo yum install rsh-serv.. 2022. 5. 13.
[Linux] numfmt 명령어 사용법 리눅스에서 쉘 스크립트를 작성할 때, 파일 사이즈 같은 숫자 데이터를 다루는 경우가 많다. 이 때, 숫자의 자리수가 많으면 가독성이 매우 떨어진다. 예를 들어 13631488 바이트라고 하면 정확히 어느정도의 양인지 딱 와닿지 않는다. 13MB라고 단위를 뒤쪽에 써줘야 숫자에 대한 감이 온다. numfmt 명령어 numfmt 명령어는 숫자를 사람이 읽을 수 있는 문자 형태로 변환해주는 명령어다. numfmt [OPTION] ... [NUMBER] 1MB 같은 문자가 몇 바이트인지 숫자로 풀어서 출력해주거나 1048567 바이트가 몇 MB인지 해석해서 출력해주는 기능을 제공한다. 예를 들어 $ numfmt --from=si 1M # 1M를 si 단위로 풀어서 출력 1000000 $ numfmt --from.. 2022. 5. 2.
[Java] synchronized 키워드 -고유락(Intrinsic Lock) 자바는 멀티스레드 환경에서 동기화를 지원하기 위해 가장 기초적인 장치인 '고유락(Intrinsic Lock)'을 지원한다.(고유락은 모니터락(Monitor lock) 혹은 모니터(monitor)라고 부르기도 한다) 개발자는 synchronized 키워드를 이용해서 특정 객체의 고유락을 사용해 여러 스레드를 동기화 시킬 수 있다. Java의 synchronized 자바의 synchronized 블럭은 다음과 같이 생겼다. synchronized(obj) { // critical section } synchronized 블럭은 객체를 필요로 한다. 동일한 객체에 대해서 synchronized 블록을 사용하는 두 스레드는 한 번에 하나의 스레드만 synchronized 블록 내부로 들어갈 수 있다. 자바에서 .. 2022. 4. 7.
[Java] 스레드 안전성(Thread Safety) 이전 포스트에서 자바는 멀티 스레드를 지원하여 여러 작업들을 동시에 실행할 수 있다고 했다. (링크 : [Java] 자바 병렬 프로그래밍 - 멀티 스레드의 장단점) 요즘 출시되는 CPU들은 기본적으로 여러개의 코어를 탑재하고 있다. 따라서 멀티 스레드들은 동시에 다른 코어에서 병렬적으로 실행될 수 있다. 문제는 이 스레드들이 동시에 같은 데이터에 접근할 때 발생한다. 스레드 안전(Thread-Safe) 조금 따분한 주제일 수도 있지만 '스레드 안전(Thread-safe)'에 대해서 정리를 하고 넘어가야 한다. 자바 클래스는 어떻게 동작해야하는지에 대한 '클래스 명세(Class Specification)'를 가지고 있다. 잘 정의된 클래스 명세는 객체의 상태를 제약하는 '불변조건(Invariants)'와 .. 2022. 3. 31.
[Linux] find 명령어 사용법 find 명령어는 리눅스에서 파일이나 디렉토리를 검색할 때 사용하는 명령어다. 리눅스 파일 시스템에 있는 다양한 형태의 파일과 디렉토리들을 검색할 수 있도록 find 명령어는 굉장히 많은 옵션과 기능을 제공한다. 파일 시스템의 트리 구조를 탐색하면서 원하는 종류의 파일들을 탐색할 수 있으며, 그 결과를 명령어 파이프라인을 이용해서 다른 명령어의 인자로 넣어 다양한 종류의 작업을 할 수 있다. 예를 들어 생성된지 30일이 지난 파일을 삭제하는 명령을 find 명령어를 통해 실행할 수 있다. find 명령어 사용법 find 명령어는 옵션과 찾을 경로, expression으로 구성된다. find [options] [path] [expression] option과 expression은 선택적으로 사용할 수 있다.. 2022. 3. 22.
[Java] 자바 병렬 프로그래밍 - 멀티 스레드의 장단점 복잡한 프로그램이 제대로 동작하도록 코드를 작성하는 일은 어렵다. 하지만 그 복잡한 프로그램이 빠르면서 제대로 동작하도록 작성하는 것은 더욱 어렵다. 즉, 어떤 작업들을 순차적으로 실행하는 프로그램보다 동시에 여러 작업들이 수행되도록 프로그램을 작성하는 것은 더욱 어렵다. 자바에서는 스레드를 이용해 프로그램의 여러 작업들을 동시에 실행하도록 해준다. 하나의 자바 프로그램에서 여러 스레드가 동작한다는 의미는 하나의 자바 프로그램이 여러 개의 프로세서를 활용해 최대한 성능을 끌어올린다는 것을 의미한다. 잘 알려져 있듯이 CPU의 성능을 향상시키기 위해 클럭 속도를 빠르게 올리는 방향에서 코어의 개수가 늘어나는 방향으로 전환되었다. 클럭 주파수를 끝없이 올리기엔 물리적인 한계가 있기 때문이다. CPU 코어의 .. 2022. 3. 15.