CentOS가 devtmpfs 또는 tmpfs에 메모리의 절반을 사용하는 이유는 무엇입니까?

CentOS가 devtmpfs 또는 tmpfs에 메모리의 절반을 사용하는 이유는 무엇입니까?

최근에 가상 머신을 12GB에서 64GB로 업그레이드했는데 어떤 애플리케이션도 실행되지 않고 메모리의 절반이 할당된 것을 발견했습니다. 업그레이드 후에는 가상 머신 로드가 혼란스럽고 대부분의 경우 가상 머신이 응답하지 않게 됩니다.

htop어느 프로세스가 이 메모리를 둘 다에 할당하고 있는지 찾을 수 없었지만 ps출력에서 ​​일부 df -h파티션(예 /tmp: , 및 ./sys/fs/cgroup/run/dev/shmtmpfs/devdevtmpfs

나는 이 메모리가 공유된다는 것을 이해합니다. 이것이 바로 메모리가 사용되는 이유이며, 새로운 응용 프로그램이 이러한 파티션이 차지하는 메모리를 사용할 수 있다는 것입니다. 내가 틀렸다면 정정해주세요. 그러나 이 free -mh명령은 새 애플리케이션에 약 20GB의 메모리를 사용할 수 있다고 보고합니다. "무료" 열도 마찬가지입니다.

출력 df -h.

Filesystem           Size  Used Avail Use% Mounted on
...
devtmpfs              32G     0   32G   0% /dev
tmpfs                 32G     0   32G   0% /dev/shm
tmpfs                 32G   49M   31G   1% /run
tmpfs                 32G     0   32G   0% /sys/fs/cgroup
tmpfs                 10G   17M   10G   1% /tmp
...

출력 free -mh.

               total        used        free      shared  buff/cache   available
Mem:            62G         41G         21G         24M        106M         21G

프로그램이 더 많은 메모리를 사용한다는 사실 로 판단하면 px aux75MB입니다 /usr/lib/systemd/systemd-journald. 그 순간의 출력이나 vmstatand 명령의 출력이 없습니다 top -b 1.

다른 128GB Centos 시스템에서는 64GB가 사용되었음을 확인했습니다. 그러나 "Free" 열에 따르면 59GB의 여유 공간이 있음에도 불구하고 tmpfs출력의 "Free" 열에는 새 애플리케이션이 최대 123GB까지 할당할 수 있음이 여전히 표시되었습니다.free -mh

후자의 예는 정확하고 이해하기 쉬운 것 같습니다. 그러나 나는 전자를 이해할 수 없다.

Java 응용 프로그램( )에 12GB 이상의 메모리를 할당하는 데 문제가 있으며 ES_HEAP_SIZE=12g메모리 동작을 개선하기 위해 어떤 조치를 취해야 하는지 궁금합니다. 또한 tmpfs이 파티션의 이유와 시스템 메모리의 절반을 할당하는 이유를 더 잘 이해하고 싶습니다 . devtmpfs합계의 크기를 줄이는 방법이 있습니까 tmpfs? 시스템에 어떤 영향을 미치나요?

이 시스템은 Centos 7.1.1503커널 버전 입니다 3.10.0-229.el7.x86_64. 미리 감사드립니다.

추신:java 응용 프로그램이 중단되고 실행할 수도 없습니다. ps또는 htop, 유일한 해결책은 실행하는 것입니다 killall -9 java. 시스템도 응답하지 않게 되었습니다.

2017/01/11 업데이트됨

이제 더 많은 응용 프로그램이 실행되므로 더 많은 프로세스가 실행됩니다. 출력이 lsof -n | grep deleted비어 있습니다. 내가 작성한 보고서는 무엇입니까 ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n?

  • 1MB 미만의 프로세스가 143개 있습니다.
  • 55개 프로세스의 크기는 1MB에서 10MB까지이며 총 221MB입니다.
  • 10MB를 초과하는 프로세스는 5개뿐입니다.
    • 파이썬 14.89MB
    • rsyslogd 26MB
    • systemd-저널드 47.83MB
    • 키바나 78.72MB
    • 자바 13456MB

그러나 free -mh명령은 다음을 보고하며 나머지 메모리가 어디에서 소비되고 있는지 전혀 알 수 없습니다.

              total        used        free      shared  buff/cache   available
Mem:            62G         54G        5.5G        478M        3.2G        7.8G

2017년 1월 16일 업데이트됨

문제가 해결되었습니다. 첫째, 이 문제에는 여러 가지 문제가 있습니다.

tmpfsdevtmpfs메모리 사용량은 vmware 호스트의 메모리 팽창과 관련이 없습니다 . 이는 8GB 할당량(VM의 메모리 할당과 충돌)과 함께 VM이 로드 중인 경우 이상하게 보고된 동작을 초래했습니다. dmesg 에 언급된 오류가 있습니다 vmballoon_work.

이 문제에 대한 정보를 찾을 수 없으며 이는 호스트에 문제가 있을 수 있음을 시사하므로 이 질문/답변이 향후 질문에 유용할 것이라고 생각했습니다. 핵심은 다음과 같은 dmesg 메시지입니다.

CPU: 6 PID: 10033 Comm: kworker/6:0 Not tainted 3.10.0-229.el7.x86_64 #1
Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 09/17/2015
Workqueue: events_freezable **vmballoon_work** [vmw_balloon]
task: ffff88001d4ead80 ti: ffff880b9bad8000 task.ti: ffff880b9bad8000
RIP: 0010:[<ffffffff812edd71>]  [<ffffffff812edd71>] __list_del_entry+0x31/0xd0
RSP: 0000:ffff880b9badbd68  EFLAGS: 00010246
RAX: ffffffffa032f3c0 RBX: ffffea0000000003 RCX: dead000000200200
RDX: ffffea001107ffe0 RSI: ffff88103fd969f0 RDI: ffffea0011040020
RBP: ffff880b9badbd68 R08: ffffea0011040020 R09: ffff88103fb94000
R10: 0000000000000020 R11: 0000000000000002 R12: ffff88103ff9d0d0
R13: 0000000000000002 R14: ffffff8000000001 R15: 0000000000000002
FS:  0000000000000000(0000) GS:ffff88103fd80000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
CR2: 00000000016ba024 CR3: 0000000267e1c000 CR4: 00000000000407e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Stack:
 ffff880b9badbd80 ffffffff812ede1d ffffffffa032f3c0 ffff880b9badbdb0
 ffffffffa032d04e ffffffffa032f4c0 ffff880155bd4180 ffff88103fd92ec0
 ffff88103fd97300 ffff880b9badbe18 ffffffffa032d388 ffffffffa032f4c8
Call Trace:
 [<ffffffff812ede1d>] list_del+0xd/0x30
 [<ffffffffa032d04e>] vmballoon_pop+0x4e/0x90 [vmw_balloon]
 [<ffffffffa032d388>] vmballoon_work+0xe8/0x720 [vmw_balloon]
 [<ffffffff8108f1db>] process_one_work+0x17b/0x470
 [<ffffffff8108ffbb>] worker_thread+0x11b/0x400
 [<ffffffff8108fea0>] ? rescuer_thread+0x400/0x400
 [<ffffffff8109739f>] kthread+0xcf/0xe0
 [<ffffffff810972d0>] ? kthread_create_on_node+0x140/0x140
 [<ffffffff8161497c>] ret_from_fork+0x7c/0xb0
 [<ffffffff810972d0>] ? kthread_create_on_node+0x140/0x140

나는 감사하고 싶다레이 F. 리베이로및 에 대한 그의 tmpfs대답 devtmpfs. 제목부터 바꿨어요CentOS가 devtmpfs 또는 tmpfs에 메모리의 절반을 사용하는 이유는 무엇입니까?도착하다CentOS 가상 머신에서 사용되는 메모리의 절반은 어디에 있습니까?그리고 몇 가지 태그를 추가했습니다.

답변1

귀하 devtmpfstmpfs파일 시스템은 실제로 GB의 메모리를 사용하지 않습니다. 32GB까지 증가할 수 있지만 이는 증가할 수 있는 최대 한도입니다. 상한선도 구성 가능하며, 사용하는 내용이 아니라 콘텐츠가 있는 RAM 부분만 차지합니다.

df를 자세히 보면
/dev1M 미만의 메모리를 사용하고 있으므로 0,
/dev/shm같은 것,
/sys/fs/cgroup같은 상황 으로 표시되며
/tmp17MB가 사용 중이고
/run49MB가 사용 중입니다.

따라서 devtmpfs, tmpfs 파일 시스템 조합은 70MB 미만의 RAM을 사용합니다. (메가바이트 단위이므로 참고하세요)

RAM을 소비하는 것은 확실히 파일 시스템이 아닙니다.

내가 말했듯이, 그것이 귀찮다면 한도 값을 변경할 수 있지만 지금은 JVM 매개변수가 사용하도록 구성된 RAM의 양에 초점을 맞추겠습니다.

마지막으로 OP의 피드백에 따르면 vmware 호스트에 메모리 팽창 문제가 있으며 dmesg에서 vmballoon_work가 언급되면 오류가 발생합니다.

이는 VM 하이퍼바이저의 8GB 할당량과 함께 VM 로드가 왜곡되는 이상한 동작이 보고된 결과를 가져왔으므로 이러한 파일 시스템이 범인이 아님을 확인합니다.

관련 정보