728x90

HACMP 기본 Cluster Process 확인

ps -ef  | grep cluster 

 



서비스 프로세스 확인 

lssrc -g cluter 

 



HACMP 시작 

smitty clstart 

 


기동 확인 
tail -f /tmp/hacmp.out 


정상 종료
smitty clstop 

 



강제 종료 


smitty clstop 



HACMP TakeOver (unix1 -> unix2)
smitty clstop 



HACMP TakeOver (unix2 -> unix1 )
smitty clstart



728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 소켓 파일  (0) 2025.04.04
[Linux]커널 파라미터 및 사용자 리소스 (shell limit) 설정  (1) 2023.03.23
[Linux] top 명령어  (0) 2023.01.19
[Linux] kernal memory 영역  (0) 2023.01.19
[Linux] ssh 접속 지연 조치 방법  (0) 2022.12.05
728x90

📦 리눅스 소켓 파일이 뭔지 알려줌

소켓 파일이란, 리눅스에서 파일처럼 생겼지만 사실은 프로세스끼리 대화하려고 쓰는 통신 도구임. 보통은 유닉스 도메인 소켓이라고 부름. 생긴 건 그냥 /tmp/mysocket 이런 식으로 생겼고, 실제로 파일 시스템에 존재함.

$ ls -l /tmp/mysocket
srwxr-xr-x 1 user user 0 Apr  4 13:00 /tmp/mysocket

맨 앞에 s 보이면 "이건 소켓 파일이다!" 라는 뜻임.


🧠 언제 쓰냐면

  • 같은 컴퓨터 안에 있는 프로세스끼리 대화할 때 씀.
  • 성능 빠름. 네트워크 스택 안 타니까 부담 적음.
  • 보통 DB들이 이렇게 통신함. 예를 들어 MySQL이 클라이언트랑 얘기할 때 /var/run/mysqld/mysqld.sock 이런 파일 쓰는 경우 많음.

🆚 TCP 소켓이랑 뭐가 다르냐면

항목유닉스 소켓TCP 소켓
위치 파일 시스템 경로 (/tmp/...) IP + 포트 번호
통신 대상 같은 머신 다른 컴퓨터도 가능
속도 빠름 상대적으로 느림
보안 파일 권한으로 관리 방화벽, 인증 등 필요

🛠️ 써보는 예시 (파이썬임)

서버 쪽

import socket, os

path = "/tmp/mysocket"
if os.path.exists(path):
    os.remove(path)

server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server.bind(path)
server.listen(1)

conn, _ = server.accept()
print("받은거:", conn.recv(1024).decode())
conn.close()
server.close()

 

클라이언트 쪽

import socket

client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
client.connect("/tmp/mysocket")
client.sendall(b"안녕 서버야")
client.close()

 

 


 

📡 유닉스 도메인 소켓에서 쓰는 프로토콜은?

리눅스에서 유닉스 도메인 소켓을 사용할 때는 네트워크처럼 TCP/IP나 UDP 같은 전통적인 프로토콜을 쓰지 않음.
대신 파일 시스템 기반의 자체적인 전송 방식을 씀.


✅ 좀 더 구체적으로 말하면

소켓 만들 때 이 코드 보이잖슴:

socket(AF_UNIX, SOCK_STREAM)

여기서 의미는:

  • AF_UNIX → 유닉스 도메인 소켓을 쓰겠다 (주소 체계)
  • SOCK_STREAM → 스트림 방식으로 데이터 주고받겠다 (연결 지향, TCP처럼 작동)
    • 이건 프로토콜이라기보단 통신 방식

즉, 프로토콜이 TCP/UDP 같은 IP 프로토콜이 아니라,
커널 내부에서 구현된 파일 기반 IPC 프로토콜을 씀.


📋 요약하자면

항목설명
주소 체계 (AF_UNIX) 유닉스 도메인 주소를 씀 (파일 경로)
소켓 타입 (SOCK_STREAM, SOCK_DGRAM) 통신 방식 정함 (스트림, 데이터그램 등)
실제 프로토콜 네트워크 프로토콜 아님. 커널 내부 전용 프로토콜 (비공개)

참고로…

  • SOCK_STREAM → TCP처럼 동작 (연결 필요, 순서 보장)
  • SOCK_DGRAM → UDP처럼 동작 (비연결, 순서 보장 안 됨)
  • 그래도 실제 TCP/UDP 프로토콜을 쓰는 건 아님!
    → 그냥 "비슷한 동작 방식"일 뿐임.

 

🔑 IPC에서 말하는 KEY는?

👉 System V IPC (shm, msg, sem)에서 사용하는

식별자 역할을 하는 키값임.
즉, 여러 프로세스가 같은 공유 자원에 접근하려면
같은 키값을 사용해야 서로 통신 가능함.


📦 System V IPC에서 사용하는 자원들

  • shm → 공유 메모리 (Shared Memory)
  • msg → 메시지 큐 (Message Queue)
  • sem → 세마포어 (Semaphore)

이 자원들은 만들 때 key_t 라는 타입의 키값을 줘야 함.

 
key_t key = ftok("/tmp/somefile", 1234);
int shmid = shmget(key, size, IPC_CREAT | 0666);

 


🔨 ftok() 설명

ftok(pathname, project_id) 함수는:

  • 파일 경로 + 정수 값을 기반으로 해서
  • 시스템 전체에서 유일한 키값을 만들어줌

그래서 둘 이상의 프로세스가 ftok("/tmp/foo", 1) 같은 걸 같이 쓰면
같은 키값이 생기고, 서로 공유 자원을 사용할 수 있게 됨.


❗ 주의할 점

  • 키값은 그냥 "약속된 ID" 정도라고 생각하면 됨.
  • 키값이 같아도 자원이 실제로 없으면 shmget() 같은 함수는 새로 만듦.
  • 키 충돌 위험은 있으나, 대부분 ftok() + 고유 파일 조합으로 회피 가능

✅ 요약하면

항목설명
KEY란? System V IPC 자원을 구분하기 위한 식별자
왜 쓰냐? 여러 프로세스가 같은 공유자원에 접근하려고
어떻게 만드냐? ftok(path, id) 써서 생성
어디에 쓰냐? shmget, msgget, semget 등에 전달
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[AIX] HACMP 핵심 요약  (0) 2025.09.02
[Linux]커널 파라미터 및 사용자 리소스 (shell limit) 설정  (1) 2023.03.23
[Linux] top 명령어  (0) 2023.01.19
[Linux] kernal memory 영역  (0) 2023.01.19
[Linux] ssh 접속 지연 조치 방법  (0) 2022.12.05
728x90

1. 리눅스 커널 이란?

리눅스 커널은 리눅스 운영체제의 주요 구성 요소이자 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스.

 

커널의 기능 

  • 메모리 관리 : 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적한다.
  • 프로세스 관리 : 어느 프로세스가 중앙 처리 장치(CPU)를 언제 얼마나 오랫동안 사용할지를 결정한다.
  • 장치 드라이버 : 하드웨어와 프로세스 사이에서 중재자/인터프리터의 역할을 수행한다.
  • 시스템 호출 및 보안 : 프로세스의 서비스 요청을 수신합니다. 

2. 커널 파라미터란?

리눅스에서 사용되는 시스템 변수들을 의미하며, 커널 변수 값을 제어하여 시스템을 운영 용도에 맞게 최적화 할 수 있는 설정. 커널 매개변수 경로는 /proc/sys 디렉토리 밑에 존재하고 커널 파라미터의 절대 경로의 수정을 통해 설정 변경이 가능하지만 sysctl을 통해 간편하게 설정할 수 있다. 

 

3. 커널 파라미터 설정 방법

영구 설정 방법

 

1) 파라미터 설정

#vi /etc/sysctl.conf
kernel.shmall = 19763530
kernel.shmmax = 80951418880

2) 설정 적용 

# sysctl -p

3) 적용 확인

[root@lenovo1 etc]# sysctl -a | grep kernel.shmall
kernel.shmall = 19763530

[root@lenovo1 etc]# sysctl kernel.shmall
kernel.shmall = 19763530

임시 설정 방법 

 

재부팅 시 적용이 초기화 된다.

 

1) 파라미터 설정

[root@lenovo1 etc]# sysctl -w kernel.shmall=20000000
kernel.shmall = 20000000

2) 설정 확인 

[root@lenovo1 etc]# sysctl kernel.shmall
kernel.shmall = 20000000

주로 커널 파라미터 변경 및 설정 할 때 

  • 성능 : Network 성능 조율, 파일 시스템 성능 조율 
  • 서비스 : DB 설치 시 성능 조율 

자주 사용되는 커널 파라미터 

 

설정 예시 (ORACLE 19c)

# oracle-database-preinstall-19c setting for fs.file-max is 6815744
fs.file-max = 6815744  

# oracle-database-preinstall-19c setting for kernel.sem is '250 32000 100 128'
kernel.sem = 250 32000 100 128

# oracle-database-preinstall-19c setting for kernel.shmmni is 4096
kernel.shmmni = 4096

# oracle-database-preinstall-19c setting for kernel.shmall is 1073741824 on x86_64
kernel.shmall = 1073741824

# oracle-database-preinstall-19c setting for kernel.shmmax is 4398046511104 on x86_64
kernel.shmmax = 4398046511104

# oracle-database-preinstall-19c setting for kernel.panic_on_oops is 1 per Orabug 19212317
kernel.panic_on_oops = 1

# oracle-database-preinstall-19c setting for net.core.rmem_default is 262144
net.core.rmem_default = 262144

# oracle-database-preinstall-19c setting for net.core.rmem_max is 4194304
net.core.rmem_max = 4194304

# oracle-database-preinstall-19c setting for net.core.wmem_default is 262144
net.core.wmem_default = 262144

# oracle-database-preinstall-19c setting for net.core.wmem_max is 1048576
net.core.wmem_max = 1048576

# oracle-database-preinstall-19c setting for net.ipv4.conf.all.rp_filter is 2
net.ipv4.conf.all.rp_filter = 2

# oracle-database-preinstall-19c setting for net.ipv4.conf.default.rp_filter is 2
net.ipv4.conf.default.rp_filter = 2

# oracle-database-preinstall-19c setting for fs.aio-max-nr is 1048576
fs.aio-max-nr = 1048576

# oracle-database-preinstall-19c setting for net.ipv4.ip_local_port_range is 9000 65500
net.ipv4.ip_local_port_range = 9000 65500
  • fs.file-max : 시스템에서 동시에 오픈 가능한 파일의 수와 연관된 파일 핸들의 최대값
  • kernel.sem 
    • semmsl : 세마포어 세트당 세마포어의 최대 개수
    • semmns : 시스템 전체에 대한 세마포어의 최대 개수
    • semopm : 시스템 호출(call)별로 수행될 수 있는 세마포어 작업의 수
    • semmni : 시스템 전체에 대한 세마포어 세트의 최대 개수
    • 세마포어(semaphore) : 오라클 백그라운드 프로세스들 간 동시성(Concurrency)을 조절하기 위해 사용
  • kernel.shmmni : 공유 메모리 세그먼트의 최대 개수
  • kernel.shmall : 특정 시점에 시스템에서 사용 가능한 공유 메모리의 최대 크기
  • kernel.shmmax : 공유 메모리 세그먼트의 최대 크기
    • 커널이 응용프로그램들에게 메모리를 할당해줄 때 작게 여러 번 할당하지 않고 큰 덩어리(=세그먼트)로 한꺼번에 주게되는데 이값이 너무 작으면 DB가 시작할 때 ORA-27123 : unable to attach to shared memory segment라는 메시지가 발생할 수 있고 너무 크면 세그먼트의 사용되지 않는 빈 공간을 두기 때문에 메모리 낭비가 발생함.
    • 이 값의 기본 값은 32MB. 오라클 사용 시에는 2G로 설정하도록 권장.
  • kernel.panic_on_oops : 버그가 발생하면 시스템 PANIC 상태로 처리할지를 결정
  • net.core.rmem_default : TCP 수신 버퍼 크기의 기본값 설정
  • net.core.rmem_max : TCP 수신 버퍼 크기의 최대값 설정
  • net.core.wmem_default : TCP 송신 버퍼 크기의 기본값 설정
  • net.core.wmem_max : TCP 송신 버퍼 크기의 최대값 설정
  • net.ipv4.conf.default.rp_filter : 모든 인터페이스에서 들어오는 패킷에 대해 reply를 하여 들어오는 인터페이스로 나가지 못하는 패킷을 거부함
  • fs.aio-max-nr : 동시에 들어오는 요청의 개수를 제한함
  • net.ipv4.ip_local_port_range : 시스템에 접속할 때 사용할 수 있는 네트워크 포트의 범위

 

3. 사용자 리소스 설정 (shell limit) 

shell limit?

 

shell과 shell이 실행한 프로세스에 대하여 시스템 상의 사용 자원을 제한할 수 있도록 해주는 설정.

limit 설정 시 두가지 종류의 limit이 존재한다. 

 

  • hard limit : soft limit에서 최대로 늘릴 수 있는 한도이며, 슈퍼유저(즉, root)에 의해서 조정이 가능함
  • soft limit : 새로운 프로세스가 생성되면 기본적으로 적용되는 제한값이다. 

shell limit을 사용하는 이유

 

웹 서비스를 운영 할 때 동시 접속자가 많은 경우에 따라 웹 서비스 프로세스 수와 해당 프로세스가 처리하게 되는 파일 수를 조절 하기 위해

 

오라클과 같은 데이터베이스 같은 경우 Linux 계정마다 실행되는 프로세스와 열린 파일의 수를 제한하는 것을 권장하기 때문 

 

설정 방법

 

1) ulimit 명령어와 옵션 사용 

  • 현재 설정 상황 확인 
[oracle@lenovo1 ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 1029047
max locked memory       (kbytes, -l) 134217728
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2) /etc/security/limits.conf 파일 수정 

 

설정 예시 (ORACLE 19c)

 

oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768
oracle   hard   memlock    134217728
oracle   soft   memlock    134217728
  • soft : 새로운 프로그램을 생성하면 기본적으로 적용되는 한도. 간간히 지키지 않아도 되는 limit
  • hard : Soft한도에서 최대로 늘릴 수 있는 한도. 무조건 지켜야 하는 최대 limit
  • nofile : 한 번에 열 수 있는 최대 파일 수
  • nproc : 최대 프로세스의 개수(KB)
  • stack : 최대 스택 사이즈(KB)
  • memlock : 쉘에 허용 가능한 가상메모리의 최대량 제한

 

728x90
반응형

'OS > Linux' 카테고리의 다른 글

[AIX] HACMP 핵심 요약  (0) 2025.09.02
[Linux] 소켓 파일  (0) 2025.04.04
[Linux] top 명령어  (0) 2023.01.19
[Linux] kernal memory 영역  (0) 2023.01.19
[Linux] ssh 접속 지연 조치 방법  (0) 2022.12.05
728x90

TOP 명령어

top 명령어는 현재 OS의 상태를 나타내주는 CLI 어플리케이션입니다. 메모리 사용량, CPU 사용량 등을 나타내주며 top를 실행하는 동안에는 주기적인 업데이트로 실시간에 근접한 내용을 보여줍니다. 리눅스에서 top 명령어를 실행하면 아래와 깉이 노출됩니다. 위에는 전체의 요약이 있으며 아래에는 각 프로세스마다 구체적인 내용을 포함하고 있습니다.

요약 영역

요약 영역은 top에서 상단에 위치하고 있습니다. 이 요약영역은 전체 프로세스가 OS에 대해서 리소스를 어느정도 차지하고 있는지를 알려줍니다. 요약 영역에 나타나는 대표적인 값은 시간, 유저, 로드 에버리지(Load Average), 테스크(Tasks), CPU, 메모리(memory)로 아래의 이미지를 보시면 각 영역에 대해 나태내느 값이 어디에 위치하는지 알 수 있습니다.

시스템 현재 시간, OS가 살아있는 시간, 유저 세션수(System time, uptime and user sessions)

이미지의 가장 왼쪽 위를 보시면 시스템 현재 시간, OS가 살아있는 시간, 그리고 유저의 세션수가 표시되는 영역이 있습니다. 가장 먼저 보이는 숫자가 시스템의 현재 시간입니다. 이 시간은 GMT 기준으로 표시됩니다. 위 예제 기준으로 GMT 16:58:55 이라는 것입니다. 이것은 한국시간으로 보면 +9를 한 00시 58분 55초와 동일합니다. 다음으로 표시되는 것이 OS가 얼마나 살아있는지 나타냅니다. days와 시간으로 표시되며 위 예제로보면 7일과 1시 15분 동안 서버가 살아있었다는 것을 알 수 있습니다. 그리고 다음 나타나는것이 현재 접속중인 유저 세션 수입니다.

좀 더 자세한 유저세션이 궁금하다면 who 명령어를 통해 알 수 있습니다.

로드 애버리지(Load Average)

2번째 영역은 로드 애버리지 영역입니다. 해당 영역은 CPU Load의 이동 평균를 표시합니다. 앞에서 부터 1분, 5분, 그리고 15분에 대한 평균값입니다. CPU Load란 CPU가 수행하는 작업의 양 입니다. 리눅스에서는 실행되거나 대기중인 프로세스의 평균입니다. 싱글 코어일 경우 1.0의 값이 CPU 100%를 사용하고 있다는 의미입니다. 멀티 코어라면 해당 코어수 만큼 * N을 한 값이 CPU 100%를 사용한다는 의미가 됩니다. 만약 100%를 넘어간다면 CPU에서 처리하지 못하고 대기하고 중인 프로세스가 있다고 보시면됩니다.

Tasks

2번째 줄에는 Tasks에 관한 내용이 출력됩니다. Tasks는 현재 프로세스들의 상태를 나태내주는 영역입니다. Total은 전체 프로세스, running은 running 상태인 프로세스, sleeping은 대기상태인 process, stopped는 종료된 프로세스, zombies는 좀비상태인 프로세스의 수를 나타냅니다.

프로세스는 일반적으로 IO 기반의 일(IO bound)과 CPU 기반의 일(CPU-bound)을 번갈아 가면서 수행하게 됩니다. 이러한 프로세스의 상태는 일반적으로 아래와 같습니다. IO 기반의 일을 하게 될 때는 CPU는 idle 타임(프로세스가 잠을 자는 상태)에 들어가게 됩니다. 또한 프로세스 스케줄링 알고리즘에 의해 프로세스는 번갈아가면서 실행되게 됩니다. 이렇게 멀티테스킹 작업을 시도하는데 이때 프로세스에는 아래와 같은 상태의 변동이 있습니다.

  • 실행(Runnable) - CPU에 의해서 명령어가 실행중인 Process
  • 준비(Ready) - CPU의 명령어 실행을 기다리는 Process
  • 대기(Waiting) - I/O operation이 끝나기를 기다리는 Process
  • 종료(Terminated) - Ctrl + Z 등의 signal로 종료된 Process
  • Zombie - Process는 root Process로 부터 뿌리내린 자식 Process의 형식으로 트리구조를 형성합니다. 이 때 부모가 먼저 종료된 다면 root process로 부터 닿을 수 없는 Process가 생깁니다. 이를 zombie process라고 부릅니다.

CPU 사용량

Tasks 아래 %Cpu(s)라는 영역이 있습니다. 이 영역은 CPU가 어떻게 사용되고 있는지 그 사용율을 보여주는 영역입니다. 모든 값의 총 합은 100% 이며 이를 퍼센테이지로 나누어서 보여줍니다. 각 요소는 아래와 같습니다.

  • us : 프로세스의 유저 영역에서의 CPU 사용률
  • sy : 프로세스의 커널 영역에서의 CPU 사용률
  • ni : 프로세스의 우선순위(priority) 설정에 사용하는 CPU 사용률
  • id : 사용하고 있지 않는 비율
  • wa : IO가 완료될때까지 기다리고 있는 CPU 비율
  • hi : 하드웨어 인터럽트에 사용되는 CPU 사용률
  • si : 소프트웨어 인터럽트에 사용되는 CPU 사용률
  • st : CPU를 VM에서 사용하여 대기하는 CPU 비율

메모리 사용량

%Cpu(s) 영역 아래에 메모리와 관련된 영역이 있습니다. 첫번째 줄은 RAM의 메모리 영역으로 Mem이라 표시되어있는 부분입니다. 그리고 아랫줄은 디스크를 메모리 처럼 이용하는 Swap 메모리 영역입니다. 일반적으로 Mem의 사용량이 거의 가득 찼을때 Swap 메모리 영역을 사용합니다. 이 영역은 디스크이기 때문에 RAM 메모리보다 속도가 많이 느린 단점을 가집니다.

  • total : 총 메모리 양
  • free : 사용가능한 메모리 양
  • used : 사용중인 메모리 양

buff/cache에서 buff는 buffers의 약자입니다. 이 값은 커널 버퍼에서 사용되는 메모리를 뜻합니다. cache는 Disk의 페이지 캐시를 말합니다. 즉, buff/cache는 IO와 관련되어 사용되는 버퍼에 사용되는 메모리를 말합니다. 이 메모리가 있으므로써 IO에 상대적으로 빠른 속도를 가질 수 있습니다. avail Mem은 swap 메모리를 사용하지 않고 사용할 수 있는 메모리의 크기를 말합니다.

디테일 영역

지금부터는 top 명령어의 디테일 영역에 대해서 알아보도록 하겠습니다. 디테일 영역에는 각 프로세스에 대한 상세한 내용이 나옵니다. 위 예제에서는 아래의 이미지 부분이 디테일 부분입니다. 각 요소에 대해서 하나씩 보도록하겠습니다.

  • PID
    • PID는 프로세스 ID이며 프로세스를 구분하기 위한 겹치지않는 고유한 값입니다.
  •  USER
    • 해당 프로세스를 실행한 USER 이름 또는 효과를 받는 USER의 이름입니다.
  • PR & NI
    • PR : 커널에 의해서 스케줄링되는 우선순위입니다.
    • NI : PR에 영향을 주는 nice라는 값입니다.
  • VIRT, RES, SHR, %MEM
    • 해당 필드들은 프로세스의 메모리와 관련있습니다.
    • VIRT : 프로세스가 소비하고 있는 총 메모리입니다. 프로그램이 실행중인 코드, heap, stack과 같은 메모리, IO buffer 메모리를 포함합니다.
    • RES : RAM에서 사용중인 메모리의 크기를 나타냅니다.
    • SHR : 다른 프로세스와의 공유메모리(Shared Memory)를 나타냅니다.
    • %MEM : RAM에서 RES가 차지하는 비율을 나타냅니다.
  • S : 프로세스의 현재 상태를 나타냅니다.
  • TIME+ : 프로세스가 사용한 토탈 CPU 시간
  • COMMAND : 해당 프로세스를 실행한 커맨드를 나타냅니다.

유명한 top용 커맨드

k - kill process

top를 통해 프로세스를 모니터링하며 프로세스를 종료해야겠다고 생각할 수 있습니다. 이때 top에서는 top화면을 보며 프로세스를 종료할 수 있는 기능을 제공해주고 있습니다. 해당 기능을 사용하기 위한 커맨드는 k입니다.

Sorting the process list

디테일 영역에 대해서 원하는 값을 기준으로 정렬하는 방법을 제공합니다. 제공하는 커맨드는 아래와 같습니다. 또한 이미지는 메모리 사용량을 기준으로 정렬한 값입니다.ㅖㅡㅡㅖㅖㅖㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅌ

  • ‘M’ to sort by memory usage
  • ‘P’ to sort by CPU usage
  • ‘N’ to sort by process ID
  • ‘T’ to sort by the running time
  • ‘R’ to sort by 오름차순과 내림차순을 토글 변경합니다.

Showing a list of threads instead of processes

top는 기본적으로 프로세스를 기본으로하여 정보를 보여줍니다. 하지만 H를 누르면 쓰레드(thread)를 기준으로 보여주는 방식으로 변경됩니다. 변경되는 부분은 요약의 Tasks 영역과 디테일 영역입니다.

Filtering through processes

프로세스가 너무 많다면 필터링 기능또한 제공해주고 있습니다. 해당 기능을 사용하기 위해서는 o 또는 O를 누르시면 됩니다. 필터는 COMMAND, %CPU 등등 다양한 방법으로 가능합니다.

COMMAND에 JAVA가 포함되는 프로세스만 확인

%MEM값이 3% 이상인 프로세스만 확인

 

728x90
반응형
728x90

Buffers와 cached 영역

커널은 블록디바이스(디스크)로부터 데이터를 읽거나 사용자의 데이터를 디스크에 저장한다. 하지만 디스크는 다른 장치에 비해 매우 느리기 때문에 디스크에 요청을 기다리는 시간이 상당히 많이 소요되고, 이로 인해 시스템에 부하가 발생하게 된다.

 

한번 읽은 디스크의 내용을 메모리에 저장해 두어서 동일한 내용을 읽고자 하면 디스크로 요청하지 않고 메모리에 저장해 두어서, 동일한 내용을 일고자 한다면 디스크로 요청하지 않고 메모리오 요청하게 되는데 이런기능을 캐싱기능이라고 한다

 

이때 사용되는 캐싱영역을 buffers, cached라고 부른는데 이 차이점을 알아보고자 한다.

 

 

 

Page Cache는 bio 구조체를 만들고 해당 구조체에 디스크로부터 받은 일반적인 데이터를 저장하게 되고 Buffer Cache는 일반적인 데이터가 아닌 _get_blk()와 같은 내부 함수를 통해 데이터가 아닌 super block, inode block 데이터를 저장한다. 정리하면 Page Cache는 파일 내용을 저장하고 있는 캐쉬, Buffer Cache는 파일시스템의 메타 데이터를 담고 있는 블록을 저장한다.

 

서버운영 시간이 길지 않을 때는 가용영역에 있는 메모리의 사용양이 사용영역보다 많게 됩니다. 시간이 조금 지나면 시스템은 가용영역 중 일부를 , 캐쉬영역으로 사용하게 됩니다. 그러나 시간이 지날수록 application에서 사용해야 되는 사용영역이 늘어나게 되면 일부 캐쉬영역을 반환해서 사용영역으로 반환하게 된다, 이렇게 지나고 캐쉬영역이 사용할 메모리 공간이 없어지게 되면 시스템 swap 영역을 사용하게 되고 그 순간부터 시스템 성능이 줄어들게 됩니다. 이처럼 buffers와 cached는 시스템의 I/O 성능 향상을 위해서 커널이 사용하는 영역입니다.

 

/proc/meminfo 읽기

root@choi:~# cat /proc/meminfo
MemTotal: 16305588 kB
MemFree: 366592 kB
MemAvailable: 15282500 kB
Buffers: 7065240 kB
Cached: 8024384 kB
SwapCached: 196 kB
Active: 5018828 kB
Inactive: 10413956 kB
Active(anon): 220168 kB
Inactive(anon): 223656 kB
Active(file): 4798660 kB
Inactive(file): 10190300 kB
Unevictable: 16 kB
Mlocked: 16 kB
SwapTotal: 2097148 kB
SwapFree: 2087420 kB
Dirty: 812 kB
Writeback: 0 kB
AnonPages: 343028 kB
Mapped: 242032 kB
Shmem: 100664 kB
Slab: 388140 kB
SReclaimable: 262456 kB
SUnreclaim: 125684 kB
KernelStack: 6288 kB
PageTables: 27120 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 10249940 kB
Committed_AS: 2933680 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 2048 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 941696 kB
DirectMap2M: 15716352 kB

SwapCached : SwapCached는 SWAP으로 빠진 영역 중 다시 메모리로 돌아온 영역입니다. 시ㅍ스템에 메모리가 부족하면 커널은 프로세스의 주소공간 중 swap영역으로 이동시킬 수 있는 메모리를 선택해서 swap 영역으로 이동시킨다. 이 과정에서 I/O가 일어나기 때문에 성능저하가 발생한다. 그 후 메모리가 확보되어 swap영역으로 빠졌던 영역이 다시 메모리로 돌아가더라도 지우지 않고 이후에 발생할 수 있는 메모리 부족현상을 대비해서 이전에 내용을 지우지 않습니다.

 

Active(anon) : 특정 파일 내용을 저장하고 있는 Page Cache 영역을 제외한 메모리영역을 의미 한다. 주로 프로세스들이 사용하는 메모리 영역을 지칭하며, 그중에서도 비교적 최근에 메모리영역이 참조되어 swap 영역으로 이동되지 않을 메모리 영역을 의미한다.

 

Inactive(anon) : Active(anon)와 동일영역, 비교적 참조한지가 오래되어 swap으로 이동할 수 있는 메모리 영역

 

Active(file) : anon과 다르게 file로 되어 있는 이 영역은 커널이 I/O 성능 향상을 위해 사용된는 영역을 의미한다. buffer와 cached가 여기에 속한다. 최근에 참조되어 swap영역으로 이동되지 않을 메모리 영역이다.

 

Inactive(file) : Active(file)과 비슷한 용도로 사용, 비교적 참조 된지 오래되어 swap 영역으로 내려 갈 수 있는 영역이다.

 

Dirty : I/O 성능향상을 위해 커널이 캐시 목적으로 사용하는 영역 중 쓰기 작업 이 이루어져서 실제 블록 디바이스 드라이버에 씌어져야 할 영역을 의미한다. 커널은 기본적으로 I/O 쓰기 요청이 들어오면 바로 블록 디바이스 드라이버에 내리지 않고 일정량이 될 때까지 모았다가 지연쓰기를 한다.

 

slab : 메모리 영역 중 커널이 직접 사용하는 영역을 Slab 영역이라고 한다. 이 영역에는 dentry cache, inode cache등 커널이 사용하는 메모리가 포함된다.

 

SReclaimable : slab 영역 중 재사용 될 수 있는 영역이다. 캐시 용도로 사용되는 메모리들이 주로 여기에 포함된다. 메모리 부족현상이 일어나면 해제되어 프로세스에 할당 될 수 있는 영역이다.

 

SUnreclaim : slab 영역 중 재사용 될 수 없는 영역이다. 커널이 현재 사용중인 영역이며 해제해서 다른 용도로 사용할 ㅅ없다.

728x90
반응형
728x90

아래와 같이 PG stanby 서버 ssh 로그인이 느린 문제가 발생 

때문에 failover 가 일어날 당시 pgool을 통한 online recovery 가 상당히 느려지는 문제점이 발생 

( 초기 basebackup 또한 상당한 시간이 걸렸다 ) 

 

-v 옵션을 주고 ssh 로 standby 서버에 로그인을 시도해보니 마지막 부분에서 시간이 많이 걸리는 것을 알 수 있었다. 

[postgres@postgres-ha1 ssh]$ ssh -v postgres@192.168.126.5
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: Connecting to 192.168.126.5 [192.168.126.5] port 22.
debug1: Connection established.
debug1: identity file /home/postgres/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /home/postgres/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/postgres/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/postgres/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/postgres/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/postgres/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/postgres/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/postgres/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4
debug1: match: OpenSSH_7.4 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 192.168.126.5:22 as 'postgres'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: curve25519-sha256 need=64 dh_need=64
debug1: kex: curve25519-sha256 need=64 dh_need=64
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:d2SLRQ9JOv/a9p/FzQ1NBnAVvqcKNmR3uLUQWX6IML4
debug1: Host '192.168.126.5' is known and matches the ECDSA host key.
debug1: Found key in /home/postgres/.ssh/known_hosts:1
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
...
...

 

구글링을 해보니 /etc/ssh/ssd_config 파일의 UseDNS 부분의 주석처리를 해제하고  no 로 바꾸어 주면 해결된다는 것을 찾았다.  

이 파라미터를 on으로 설정해 놓으면 SSH 접속 시 DNS Lookup을 하여, DNS를 찾지 못하는 경우 일정시간 대기 후 타임아웃이 발생 한다. 즉, ssh 지연 원인은  DNS 설정이 되어 있지 않고, sshd_config 파일의 UseDNS 항목이 yes 또는 주석 처리되어 있을 때 발생! 

 

 

파라미터 변경 후 ssh 데몬을 재실행 해준다. 

service sshd restart

 

다시 ssh 를 통해 standby 서버로 로그인해보니 어떤 딜레이도 없이 로그인 완료! 

728x90
반응형
728x90

sort

값들을 정렬 해준다.

 

[옵션 설명]

 

    -k : key를 기준으로 정렬

    -t : 필드 구분자로 데이터 컬럼을 나누어준다 ( 기본값은 공백) 

    -f : 대소문자 무시

    -n : 숫자 정렬-

    -u : 정렬 후 행이 같을 경우 중복 제거

    -r : 내림차순 정렬

    -g : 일반 숫자 정렬

 

 

[사용 예시] 

 

세미콜론(;)을 기준으로 컬럼을 나눠 3번째 컬럼(나이)을 기준으로 정렬하였는데 문자열 정렬 옵션으로 동작

 

sort -t ";" -k 3 sort.txt

sort -t ";"-k 3 sort.txt
afa9061f-cc05-4470-bc28-e77b9a58b517;James;10
1ac46560-3642-42bb-81af-ab0d882a7563;Joseph;11
e3f8a602-b62e-4115-bbd6-0702cdb88afc;Thomas;11
23493703-dfa7-433f-abd3-dda0b8ded865;David;13
27c50484-850d-4477-9893-1678b993c1b8;William;14
9878141a-7dbb-42ce-a198-1a60b97a5fee;Richard;16
e794eda6-b5c6-4ea8-8f2a-7cb877d4d5d6;Michael;17
122edbb8-bcc0-46d8-8f0c-3fa7b54369e9;Robert;7
c10c3715-ee97-42e8-b906-6d50558378f4;Charles;7
1a72c571-994f-4e2d-bfc0-26927aaa3164;John;9

 

 

위의 예제에 -n 옵션을 추가하여 나이를 정렬하는데 숫자 정렬이 된 것을 확인

sort -t ";" -k 3 -n sort.txt

 

> sort -t ";"-k 3 -n sort.txt
122edbb8-bcc0-46d8-8f0c-3fa7b54369e9;Robert;7
c10c3715-ee97-42e8-b906-6d50558378f4;Charles;7
1a72c571-994f-4e2d-bfc0-26927aaa3164;John;9
afa9061f-cc05-4470-bc28-e77b9a58b517;James;10
1ac46560-3642-42bb-81af-ab0d882a7563;Joseph;11
e3f8a602-b62e-4115-bbd6-0702cdb88afc;Thomas;11
23493703-dfa7-433f-abd3-dda0b8ded865;David;13
27c50484-850d-4477-9893-1678b993c1b8;William;14
9878141a-7dbb-42ce-a198-1a60b97a5fee;Richard;16
e794eda6-b5c6-4ea8-8f2a-7cb877d4d5d6;Michael;17

 

-k 2,2 는 2번째 컬럼에서 2번째 컬럼까지만 비교하라는 뜻

 

sort -t ";" -k 2,2 ort.txt

 

-k 옵션을 여러 개 사용하여 정렬 우선순위를 지정할 수 있다.

밑의 예시는 나이(문자열)로 정렬한 뒤, 나이가 같으면 이름으로 정렬한다. 

 

sort -t ";" -k 3,3 -k 2,2 sort.txt

 

uniq

중복되는 단어를 제거, 표시 해준다.

 

[옵션 설명]

 

-u : 유일한 라인만 표시 중복된 라인은 제거해서 보여준다.

-d :  -u 와는 반대로 중복되는 라인만 표시하며 아래 예제는 중복되는 line인 bat 만 표시한다

-c :  라인별 중복 횟수를 계산해서 표시한다

 -i : 대소문자 무시

 

[사용 예시] 

 

중복되는 단어인 bat 한번만 표시됨 ( 중복 제거 )

$ sortinput.txt |uniq
abc
Abc
ABc
apple
BALL
bat

유일한 라인만 표시, bat 표시되지 않음

$ sortinput.txt |uniq-u
abc
Abc
ABc
apple
BALL

중복되는 라인만 표시

$ sortinput.txt |uniq-d
bat

중복 횟수 세기

$ sortinput.txt |uniq-c
1     abc
1     Abc
1     ABc
1     apple
1     BALL
2     bat
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] top 명령어  (0) 2023.01.19
[Linux] kernal memory 영역  (0) 2023.01.19
[Linux] ssh 접속 지연 조치 방법  (0) 2022.12.05
[Linux]압축 명령어 모음  (1) 2022.04.22
[Linux]CentOS 설치 후 초기 세팅 및 명령어 알아보기  (0) 2022.04.22
728x90

1. 압축하기 

  • 옵션 설명
-c : compress, tar 아카이브 생성 (기존 아카이브 덮어쓰기)
-v : 처리되는 과정을 나열 
-f : 대상 tar 아카이브 지정 ( 기본 옵션) 
  • tar 압축 
$ tar -cvf [파일명.tar] [폴더명]
$ tar -cvf test.tar test_folder
  • tar.gz 압축 
$ tar -zcvf [파일명.tar.gz] [폴더명]
$ tar -zcvf test.tar.gz test_folder
  •  zip 압축 
$ zip [파일명.zip] [폴더명]

-- 현재 폴더의 전체를 압축
$ zip test.zip ./*

-- 현재 폴더의 모든 것과 현재 폴더의 하위 폴더들까지 모두 압축
$ zip test.zip -r ./*

2. 압축 해제하기 

  • 옵션 설명
-x : extract, tar 아카이브에서 파일 추출 
-v : 처리되는 과정을 나열 
-f : 대상 tar 아카이브 지정 (기본 옵션)
  • tar 압축 해제 
$ tar -xvf [파일명.tar]
  • tar.gz 압축 해제 
$ tar -zxvf [파일명.tar.gz]
$ tar -zxvf test.tar.gz
  • zip 압축 해제 
$ unzip [파일명.zip]

$ unzip test.zip

--특정 폴더에 압축 해제
$ unzip test.zip -d ./target_folder
728x90
반응형
728x90

네트워크 설정 

1. 인터넷 연결 확인 

  • 인터넷 연결이 안되어 있을 시 화면
[root@localhost ~]# ping 8.8.8.8
connect: Network is unreachable
  • ifup 명령어를 사용하여 네트워크 시작
[root@localhost ~]# ifup enp0s3
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
  •  다시 인터넷 연결 확인 
[root@localhost ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=35.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=33.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=33.7 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=54 time=35.1 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=54 time=33.5 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=54 time=33.8 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=54 time=34.5 ms
^C
--- 8.8.8.8 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6014ms
rtt min/avg/max/mdev = 33.540/34.308/35.806/0.821 ms

2. 고정 IP 설정 

  •  /etc/sysconfig/network-scripts/  디렉토리 이동 
  • 고정 IP 설정을 원하는 네트워크 ifcfg-device명 파일 수정
vi ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s8
UUID=ec86f2be-e7d4-4b3b-8d73-ceacc9e95533
DEVICE=enp0s8
ONBOOT=yes

BOOTPROTO="none"
IPADDR="192.168.0.10"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"
DNS1="8.8.8.8"
DNS2="8.8.4.3"
  • 네트워크 재시작 

      1. CentOS 8 이전

service network restart

     2.  CentOS 8

nmcli networking off
nmcli networking on

yum 업데이트 및 필요 유틸 설치

yum -y update
yum install -y net-tools 
yum install -y tree 
yum install -y gcc

sudoers 설정 

visudo 

agens   ALL=(ALL:ALL) ALL
agens   ALL=(ALL)     NOPASSWD: ALL

방화벽 설정

  • 현재 오픈된 포트 확인 
[agens@localhost log]$ netstat -tulpn | grep LISTEN
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      24970/postgres
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:5432                :::*                    LISTEN      24970/postgres
tcp6       0      0 ::1:25                  :::*                    LISTEN      -
  • 방화벽 iptables 확인 
iptables -L --line
  • 방화벽 포트오픈 추가
firewall-cmd --permanent --zone=public --remove-port=3306/tcp
  • 방화벽 포트오픈 제거
firewall-cmd --permanent --zone=public --remove-port=3306/tcp
  • 방화벽 재시작 
sudo firewall-cmd --reload
  • 방화벽 해제 
systemctl stop firewalld

 

shell에서 절대 경로 표시 ( bash_profile에 추가)

export PS1=[`whoami`:'$PWD']#

NIC UUID 확인

[root@localhost ~]# nmcli connection
NAME                UUID                                  TYPE      DEVICE
enp0s3              09995200-8842-471f-99d7-0b4da7074c98  ethernet  enp0s3
Wired connection 1  0d5a6ef6-d88e-34c6-ad6d-1fc5f7e8e047  ethernet  enp0s9
enp0s8              774950fb-50f6-400e-a7de-f489a487d739  ethernet  --
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] top 명령어  (0) 2023.01.19
[Linux] kernal memory 영역  (0) 2023.01.19
[Linux] ssh 접속 지연 조치 방법  (0) 2022.12.05
[Linux] 정렬과 중복 처리 (sort, uniq)  (1) 2022.12.05
[Linux]압축 명령어 모음  (1) 2022.04.22

+ Recent posts