samba 서버 사용중 묘하게 버퍼 케시 메모리가 높게 나와서 의야해 했다.
처음엔 메모리가 부족해서 그런가? 싶어서 증설하였으나 똑같은 증상을 보였다.
여유 있는 메모리들이 얼마 없어서 메모리 증설을 하였으나 자원이 들어오는 족족 buff/cache 에 맵핑 되는걸 확인 할 수 있었다.
단순히 메모리의 문제인가 아니면 buff/cache 의 문제인가 잘 몰라서 알아보도록 하자.
buff/cache는 뭘까?
일단 buff란 프로세스가 사용하는 메모리 영역이 아니고 시스템 성능향상을 위해 커널에서 사용하고 있는 영역! 이다
cache는 페이지 캐시라 불리는 캐시 영역에 있는 메모리 양을 위미한다 I/O관련 작업을 더 빠르게 진행 하기 위해 커널에서 사용하고 있는 영역이다.
자 그러면 사용자 확인을 해보자
ss |grep tcp : 포트로 사용중인 tcp 포트의 상태 확인
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 10.10.10.10:microsoft-ds 아이피 : 포트
tcp ESTAB 0 0 10.10.10.10:microsoft-ds 아이피 : 포트
정확한 데몬명을 검색하는
netstat -antpl |grep -i smbd
위 커멘드 사용시 smbd를 사용하는 사용자들이 나오는데
netstat -antpl |grep -ic smbd 에서 -4만 하면 연결된 사용자 수가 나오겠다.
이유는 samba에 ip4 tcp 포트 2개 / ip6 tcp 포트 2개 도 같이 나오기 때문
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1371 0.0 0.0 422800 11492 ? Ss 18:56 0:00 /usr/sbin/smbd
user 4494 0.1 0.0 459936 20056 ? S 19:25 0:14 /usr/sbin/smbd
VSZ는 스왑 아웃 된 메모리, 할당되었지만 사용되지 않은 메모리 및 공유 라이브러리의 메모리를 포함하여 프로세스가 액세스 할 수있는 모든 메모리를 포함하고 가상 메모리 영역이다.
RSS는 프로세스에 할당되고 RAM에있는 메모리 양을 표시 한다. 물리적 메모리 용량을 표시한다.
의문점1. 그냥 buff/cache 들만 지우면 되지 않을까?
echo 1 > /proc/sys/vm/drop_caches 인 파일에 1 pagecache를 비운다
echo 2 > /proc/sys/vm/drop_caches dentries, inodes 비운다
echo 3 > /proc/sys/vm/drop_caches pagecache, dentries, inodes 모두 비운다.
이 작업을 해도 되긴하지만 더 자세하게 왜 해야하는지 알아보자.
추가적 메모리 사용량은
cat /proc/meminfo 에 가서 확인해보자
[root@ ~]# cat /proc/meminfo
MemTotal: 47883504 kB
MemFree: 292680 kB
MemAvailable: 45123956 kB
Buffers: 488 kB
Cached: 44197164 kB
SwapCached: 0 kB
Active: 4176800 kB
Inactive: 41012004 kB
Active(anon): 480404 kB
Inactive(anon): 530808 kB
Active(file): 3696396 kB
Inactive(file): 40481196 kB
Unevictable: 8664 kB
이렇게 쭈욱 나오는데
Inactive(file): 40481196 kB
이녀석이 문제다 비활성화 메모리 ? 같은 녀석이라
그냥 매핑만 되어 있고 실질적으로 사용 되지 않고 있는 녀석이다.
자원 요청시 프로세서가 이 부분에 대해 알아서 자원을 가져간다.
free 에서 나오는 available영역에 메모리는 사용 가능한 메모리 이며
buff/cache - available 하면 총 사용 중인 캐쉬 메모리가 나온다는걸 예측 할 수 있다.
정리해보면, 속도에 문제가 없으면 사용해도 상관이 없으며
watch 로 각 사용자별 메모리 용량을 확인해 보고 결정하는게 좋다.
=======================================
sysctl -a명령어로 커널 파라미터 설정 상태를 볼 수 있다.
TCP receive window size를 증가시킬 파라미터 (참조)
값들은 적절한 값을 입력해야함
sysctl -w net.core.rmem_default="253952"
sysctl -w net.core.wmem_default="253952"
sysctl -w net.core.rmem_max="16777216"
sysctl -w net.core.wmem_max="16777216"
sysctl -w net.ipv4.tcp_rmem="253952 253952 16777216"
sysctl -w net.ipv4.tcp_wmem="253952 253952 16777216"
참조 : TOASTMeetup 블로그
'리눅스' 카테고리의 다른 글
Samba에 ln 심볼릭 링크 적용 (0) | 2021.02.12 |
---|---|
DNS 설정 (0) | 2021.02.12 |
(9)Linux에서 유저 메모리와 커널 메모리 (0) | 2020.09.23 |
(2) Linux에서 디스크 확인과 구조 (0) | 2020.09.18 |
(1) Linux 사용 서버의 기초 확인 방법 (0) | 2020.09.18 |