리눅스

Samba 서버 buff/cache 메모리에 대해

나뭇빛자루 2020. 11. 26. 15:17
반응형

samba 서버 사용중 묘하게 버퍼 케시 메모리가 높게 나와서 의야해 했다.

처음엔 메모리가 부족해서 그런가? 싶어서 증설하였으나 똑같은 증상을 보였다.

 

여전히 buff/cache 가 높은상황이며 free가 300M밖에 안된다.

여유 있는 메모리들이 얼마 없어서 메모리 증설을 하였으나 자원이 들어오는 족족 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 블로그

 

반응형