ฉันจะวินิจฉัยสาเหตุของ Docker บน MacOS ได้อย่างไรโดยเฉพาะการcom.docker.hyperkit
ใช้ CPU 100%
สถิตินักเทียบท่า
สถิตินักเทียบท่าแสดงให้เห็นว่าคอนเทนเนอร์ที่ใช้งานอยู่ทั้งหมดมี CPU, หน่วยความจำ, Net IO และ Block IO ต่ำ
iosnoop
iosnoop แสดงให้เห็นว่าcom.docker.hyperkit
การดำเนินการประมาณ 50 เขียนต่อวินาทีรวมเป็นเงินทั้งสิ้น 500 Docker.qcow2
กิโลไบต์ต่อวินาทีไปยังแฟ้ม ตามDocker.qcow2 คืออะไร , Docker.qcow2
เป็นไฟล์เบาบางที่จัดเก็บข้อมูลถาวรสำหรับทุกตู้คอนเทนเนอร์หาง
ในกรณีของฉันไฟล์ไม่กระจัดกระจาย ขนาดฟิสิคัลตรงกับขนาดโลจิคัล
dtrace (dtruss)
dtruss sudo dtruss -p $DOCKER_PID
แสดงจำนวนpsynch_cvsignal
และการpsynch_cvwait
โทรจำนวนมาก
psynch_cvsignal(0x7F9946002408, 0x4EA701004EA70200, 0x4EA70100) = 257 0
psynch_mutexdrop(0x7F9946002318, 0x5554700, 0x5554700) = 0 0
psynch_mutexwait(0x7F9946002318, 0x5554702, 0x5554600) = 89474819 0
psynch_cvsignal(0x10BF7B470, 0x4C8095004C809600, 0x4C809300) = 257 0
psynch_cvwait(0x10BF7B470, 0x4C8095014C809600, 0x4C809300) = 0 0
psynch_cvwait(0x10BF7B470, 0x4C8096014C809700, 0x4C809600) = -1 Err#316
psynch_cvsignal(0x7F9946002408, 0x4EA702004EA70300, 0x4EA70200) = 257 0
psynch_cvwait(0x7F9946002408, 0x4EA702014EA70300, 0x4EA70200) = 0 0
psynch_cvsignal(0x10BF7B470, 0x4C8097004C809800, 0x4C809600) = 257 0
psynch_cvwait(0x10BF7B470, 0x4C8097014C809800, 0x4C809600) = 0 0
psynch_cvwait(0x10BF7B470, 0x4C8098014C809900, 0x4C809800) = -1 Err#316
อัพเดท: top
บนโฮสต์นักเทียบท่า
จากhttps://stackoverflow.com/a/58293240/30900 :
docker run -it --rm --pid host busybox top
การใช้งาน CPU บนโฮสต์ที่ฝังตัวนักเทียบท่าคือ ~ 3% การใช้ CPU ใน MacBook ของฉันคือ ~ 100% ดังนั้นโฮสต์ที่ฝังตัวนักเทียบท่าจะไม่ทำให้การใช้งาน CPU สูงขึ้น
อัพเดต: การรันสคริปต์ dtrace ของการติดตามสแต็กทั่วไป
ร่องรอยสแต็คจากสคริปต์ DTrace ในคำตอบดังต่อไปนี้: https://stackoverflow.com/a/58293035/30900
การติดตามสแต็กเคอร์เนลเหล่านี้ดูไม่เป็นอันตราย
AppleIntelLpssGspi`AppleIntelLpssGspi::regRead(unsigned int)+0x1f
AppleIntelLpssGspi`AppleIntelLpssGspi::transferMmioDuplexMulti(void*, void*, unsigned long long, unsigned int)+0x91
AppleIntelLpssSpiController`AppleIntelLpssSpiController::transferDataMmioDuplexMulti(void*, void*, unsigned int, unsigned int)+0xb2
AppleIntelLpssSpiController`AppleIntelLpssSpiController::_transferDataSubr(AppleInfoLpssSpiControllerTransferDataRequest*)+0x5bc
AppleIntelLpssSpiController`AppleIntelLpssSpiController::_transferData(AppleInfoLpssSpiControllerTransferDataRequest*)+0x24f
kernel`IOCommandGate::runAction(int (*)(OSObject*, void*, void*, void*, void*), void*, void*, void*, void*)+0x138
AppleIntelLpssSpiController`AppleIntelLpssSpiDevice::transferData(IOMemoryDescriptor*, void*, unsigned long long, unsigned long long, IOMemoryDescriptor*, void*, unsigned long long, unsigned long long, unsigned int, AppleIntelSPICompletion*)+0x151
AppleHSSPISupport`AppleHSSPIController::transferData(IOMemoryDescriptor*, void*, unsigned long long, unsigned long long, IOMemoryDescriptor*, void*, unsigned long long, unsigned long long, unsigned int, AppleIntelSPICompletion*)+0xcc
AppleHSSPISupport`AppleHSSPIController::doSPITransfer(bool, AppleHSSPITransferRetryReason*)+0x97
AppleHSSPISupport`AppleHSSPIController::InterruptOccurred(IOInterruptEventSource*, int)+0xf8
kernel`IOInterruptEventSource::checkForWork()+0x13c
kernel`IOWorkLoop::runEventSources()+0x1e2
kernel`IOWorkLoop::threadMain()+0x2c
kernel`call_continuation+0x2e
53
kernel`waitq_wakeup64_thread+0xa7
pthread`__psynch_cvsignal+0x495
pthread`_psynch_cvsignal+0x28
kernel`psynch_cvsignal+0x38
kernel`unix_syscall64+0x27d
kernel`hndl_unix_scall64+0x16
60
kernel`hndl_mdep_scall64+0x4
113
kernel`ml_set_interrupts_enabled+0x19
524
kernel`ml_set_interrupts_enabled+0x19
kernel`hndl_mdep_scall64+0x10
5890
kernel`machine_idle+0x2f8
kernel`call_continuation+0x2e
43395
การติดตามสแต็กที่พบบ่อยที่สุดในพื้นที่ของผู้ใช้ในช่วง 17 วินาทีแสดงให้เห็นอย่างชัดเจนว่า com.docker.hyperkit มีการติดตามสแต็ก 1365 ครั้งใน 17 วินาทีซึ่งcom.docker.hyperkit
สร้างเธรดซึ่งเฉลี่ยถึง 80 เธรดต่อวินาที
com.docker.hyperkit`0x000000010cbd20db+0x19f9
com.docker.hyperkit`0x000000010cbdb98c+0x157
com.docker.hyperkit`0x000000010cbf6c2d+0x4bd
libsystem_pthread.dylib`_pthread_body+0x7e
libsystem_pthread.dylib`_pthread_start+0x42
libsystem_pthread.dylib`thread_start+0xd
19
Hypervisor`hv_vmx_vcpu_read_vmcs+0x1
com.docker.hyperkit`0x000000010cbd4c4f+0x2a
com.docker.hyperkit`0x000000010cbd20db+0x174a
com.docker.hyperkit`0x000000010cbdb98c+0x157
com.docker.hyperkit`0x000000010cbf6c2d+0x4bd
libsystem_pthread.dylib`_pthread_body+0x7e
libsystem_pthread.dylib`_pthread_start+0x42
libsystem_pthread.dylib`thread_start+0xd
22
Hypervisor`hv_vmx_vcpu_read_vmcs
com.docker.hyperkit`0x000000010cbdb98c+0x157
com.docker.hyperkit`0x000000010cbf6c2d+0x4bd
libsystem_pthread.dylib`_pthread_body+0x7e
libsystem_pthread.dylib`_pthread_start+0x42
libsystem_pthread.dylib`thread_start+0xd
34
com.docker.hyperkit`0x000000010cbd878d+0x36
com.docker.hyperkit`0x000000010cbd20db+0x42f
com.docker.hyperkit`0x000000010cbdb98c+0x157
com.docker.hyperkit`0x000000010cbf6c2d+0x4bd
libsystem_pthread.dylib`_pthread_body+0x7e
libsystem_pthread.dylib`_pthread_start+0x42
libsystem_pthread.dylib`thread_start+0xd
47
Hypervisor`hv_vcpu_run+0xd
com.docker.hyperkit`0x000000010cbd20db+0x6b6
com.docker.hyperkit`0x000000010cbdb98c+0x157
com.docker.hyperkit`0x000000010cbf6c2d+0x4bd
libsystem_pthread.dylib`_pthread_body+0x7e
libsystem_pthread.dylib`_pthread_start+0x42
libsystem_pthread.dylib`thread_start+0xd
135
ประเด็นที่เกี่ยวข้อง
Github - นักเทียบท่า / สำหรับ Mac: com.docker.hyperkit การใช้งาน CPU 100% กลับมาอีกครั้ง # ความคิดเห็นหนึ่งที่แสดงให้เห็นการเพิ่มปริมาณการแคชอธิบายไว้ที่นี่: https://www.docker.com/blog/user-guided-caching-in-docker-for-mac/ ฉันลองสิ่งนี้และลดการใช้งาน CPU ลงเล็กน้อย ~ 10%