ম্যাকের জন্য ডকারে উচ্চ সিপিইউ ব্যবহার নির্ণয় করা হচ্ছে


20

বিশেষত com.docker.hyperkit100% সিপিইউ ব্যবহার করে আমি কীভাবে ম্যাকোজে ডকারের কারণটি সনাক্ত করব ?

ডকার সিপিইউ ব্যবহার

ডকারের পরিসংখ্যান

ডকারের পরিসংখ্যান দেখায় যে চলমান সমস্ত পাত্রে কম সিপিইউ, মেমরি, নেট আইও এবং ব্লক আইও রয়েছে।

ডকার পরিসংখ্যান আউটপুট

iosnoop

iosnoop দেখায় যে com.docker.hyperkitফাইলে প্রতি সেকেন্ডে 500KB হয়ে প্রতি সেকেন্ডে প্রায় 50 টি লেখা হয় Docker.qcow2ডকার.ক্কোও 2 অনুসারে কী? , 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

ডকার এম্বেড থাকা হোস্টের সিপিইউ ব্যবহারটি ~ 3%। আমার ম্যাকবুকের সিপিইউ ব্যবহার ছিল 100%। সুতরাং, ডকার এম্বেড থাকা হোস্ট সিপিইউ ব্যবহারের স্পাইক সৃষ্টি করে না।

ডকার হোস্ট টপ

আপডেট: সর্বাধিক সাধারণ স্ট্যাক ট্রেসগুলির ডিট্রেস স্ক্রিপ্টগুলি চলছে

নীচের উত্তরে 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 জড়িত। 1765 সেকেন্ডে 1365 স্ট্যাক ট্রেস করেছে যার মধ্যে 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

সম্পর্কিত ব্যাপার

গিথুব - ডকার / ম্যাকের জন্য: com.docker.hyperkit 100% সিপিইউ ব্যবহার আবার ফিরে এসেছে # 3499 । একটি মন্তব্য এখানে বর্ণিত ভলিউম ক্যাচিং যুক্ত করার পরামর্শ দেয়: https://www.docker.com/blog/user-guided-caching-in-docker-for-mac/ । আমি এটি চেষ্টা করেছিলাম এবং সিপিইউ ব্যবহারে একটি ছোট ~ 10% হ্রাস পেয়েছি।


আপনি কি ছবি তৈরি করছেন? আমি প্রচুর ব্লক আইও সম্পাদনকারী পাত্রেও মনোনিবেশ করব। আপনি কুবারনেটস সক্ষম করেছেন কিনা তাও এটি গুরুত্বপূর্ণ।
BMich

1
ক্লাস্টারটি তৈরি হয়ে কয়েক মিনিটের জন্য চলার পরে আমি সমস্ত মেট্রিক সংগ্রহ করেছি। কুবারনেটস অক্ষম। কোনও মেশিনই আইও প্রচুর ব্লক করে না। পাত্রে কিছুই করছে না। আমি লক্ষ করেছি যে সিপিইউ ব্যবহার মোটামুটি ধারক সংখ্যার সাথে সম্পর্কিত lated
জো

আপনার মেশিনে কতটি কোর / সিপিইউ রয়েছে?
বিএমবিচ

এছাড়াও, আপনি কি ডকার পুনরায় চালু করার চেষ্টা করেছেন, পাত্রে নয়, পুরো ইঞ্জিন এবং ডেস্কটপ ক্লায়েন্টকে?
বিএমইচ

আমি 4 টি কোর সহ 2018 এমবিপি 2.8 গিগাহার্টজ কোর আই 7 চালাচ্ছি। আমি ডকার ইঞ্জিনের জন্য সিপিইউ কোরগুলির সংখ্যা টুইট করার চেষ্টা করেছি। আমি 1, 3, 4 এবং 6 টির চেষ্টা করেছি। ডকারে সীমাবদ্ধ করা সিপিইউ ব্যবহারকে 100% থেকে 60% এ হ্রাস করেছে।
জো

উত্তর:


5

আমি একই সমস্যা আছে। আমার সমস্ত ভলিউম সরানোর পরে আমার সিপিইউ% স্বাভাবিকের দিকে ফিরে গেছে।

docker system prune --volumes

আমি নিজেও কিছু নামকৃত ভলিউম সরিয়ে দিয়েছি:

docker volume rm NameOfVolumeHere

এটি ম্যাকের জন্য ডকারের সাথে ভলিউম ব্যবহার করতে সক্ষম না হওয়ার সামগ্রিক সমস্যার সমাধান করে না। এই মুহুর্তে আমি কতটা ভলিউম ব্যবহার করি এবং ডকার ডেস্কটপটি ব্যবহার না করার সময় বন্ধ করার বিষয়ে আমি যত্নশীল being


3

আমার সন্দেহ হচ্ছে বিষয়টি আইও সম্পর্কিত। ম্যাকোএস ভলিউমের সাথে, এতে অক্সেক্সগুলি জড়িত যেখানে আপনি সম্পাদন করতে পারেন এমন কিছু পারফরম্যান্স টিউনিং রয়েছে। মূলত, আপনি যদি কম সামঞ্জস্যতা পরীক্ষাগুলি গ্রহণ করতে পারেন তবে delegatedদ্রুত পারফরম্যান্সের জন্য আপনি ভলিউম মোড সেট করতে পারেন । আরও বিশদ জানতে ডক্সটি দেখুন: https://docs.docker.com/docker-for-mac/osxfs-caching/ । তবে, যদি আপনার ছবিতে প্রচুর পরিমাণে ছোট ছোট ফাইল থাকে, তবে পারফরম্যান্স ক্ষতিগ্রস্থ হবে, বিশেষত আপনার যদি বেশ কয়েকটি চিত্র স্তর থাকে।

আপনি এম্বেড করা ভিএম এর মধ্যে যে কোনও প্রক্রিয়া সম্পর্কিত সমস্যা ডক ব্যবহার করে তা ডিবাগ করার জন্য আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

docker run -it --rm --pid host busybox top

(প্রস্থান করতে, ব্যবহার করুন <ctrl>-c)


এটি আইও কিনা তা সন্ধানের জন্য, আপনি নিম্নলিখিতগুলিও দেখতে পারেন:

$ docker run -it --rm --pid host alpine /bin/sh
$ apk add sysstat
$ pidstat -d 5 12

এটি ভিএম পিড নেমস্পেসে চলমান আলপাইন ধারকের ভিতরে চলে যাবে, কোনও প্রক্রিয়া থেকে কোনও আইও ঘটছে তা দেখায়, সেই প্রক্রিয়াটি কোনও ধারকটির অভ্যন্তরে রয়েছে কি না। পরিসংখ্যানগুলি এক মিনিটের (12 বার) জন্য প্রতি 5 সেকেন্ডে থাকে এবং তারপরে এটি আপনাকে প্রতি প্রক্রিয়াতে গড় টেবিল দেয়। তারপরে <ctrl>-dআপনি আলপাইন পাত্রে ধ্বংস করতে পারেন ।


মন্তব্য এবং সম্পাদনাগুলি থেকে, এই পরিসংখ্যানগুলি চেক আউট করতে পারে। একটি 4 কোর এমবিপিতে 8 টি থ্রেড রয়েছে, তাই ম্যাকওএস যদি অন্যান্য ইউনিক্স ভিত্তিক সিস্টেমের মতো রিপোর্ট করে তবে সম্পূর্ণ সিপিইউ ব্যবহার 800% হওয়া উচিত। ভিএম এর অভ্যন্তরে গত মিনিটের গড় জন্য শীর্ষ কমান্ডে 100% এরও বেশি লোড প্রদর্শিত হয়েছে (যদিও 5 এবং 15 গড়ের চেয়ে কম) যা হোস্টের হাইপারকিট প্রক্রিয়াটির জন্য আপনি প্রায় দেখেন। তাত্ক্ষণিক ব্যবহার শীর্ষ থেকে 12% এর উপরে, 3% নয়, কারণ আপনাকে সিস্টেম এবং ব্যবহারকারীর শতাংশ যুক্ত করতে হবে। এবং পিডস্টেটে দেখানো আইও নম্বরগুলি আপনি কিউকিও 2 চিত্রটিতে যা দেখছেন তাতে মোটামুটিভাবে সারিবদ্ধ হন।


যদি ডকার ইঞ্জিন নিজেই ছিটকে পড়ছে (যেমন পাত্রে পুনরায় চালু করা, বা প্রচুর স্বাস্থ্য পরীক্ষা করা), তবে আপনি আউটপুটটি দেখে এটি ডিবাগ করতে পারেন:

docker events

আমি সমস্ত ভলিউম মাউন্টগুলিতে পরিবর্তন করেছি delegatedতবে কোনও কার্যকারিতা উন্নতি হয়নি। আমি topএম্বেড করা ভিএম-তে কমান্ডটি চালিয়েছি তবে সিপিইউ ব্যবহার প্রায় 3% ডলার।
জো

pidstatIO ইস্যুগুলি আরও ভালভাবে অনুসরণ করতে আপডেট করা হয়েছে ।
বিএমইচ

pidstatসমস্ত পিআইডি-র জন্য পঠন শো 0 কেবি / এস are লেখকদের জন্য: logwriteগড়ে influxd8.5 কেবি / গুলি লেখেন এবং গড়ে 0.61 কেবি / গুলি লেখেন। প্রক্রিয়াগুলির বাকি 0 টি
জো 1

1

এটি একটি ছোট ডিট্রেস স্ক্রিপ্ট যা আমি ব্যবহার করতে ব্যবহার করছিলাম যেখানে কার্নেলটি তার সময়টি ব্যয় করছে (এটি সোলারিস থেকে, এবং সোলারিস 10 এর প্রথম দিনগুলিতে রয়েছে):

#!/usr/sbin/dtrace -s

profile:::profile-1001hz
/arg0/
{
    @[ stack() ] = count();
}

এটি কেবল কার্নেল স্ট্যাকের চিহ্নগুলি নমুনা করে এবং @hotসমষ্টিতে এটির মুখোমুখি হওয়া প্রতিটিকে গণনা করে ।

এটি রুট হিসাবে চালান:

... # ./kernelhotspots.d > /tmp/kernel_hot_spots.txt

আপনার সিপিইউ সমস্যাগুলি থাকার সময় এটি একটি শালীন সময়ের জন্য CTRL-Cচালিয়ে দিন , তারপরে স্ক্রিপ্টটি ভাঙতে হিট করুন । এটি যে কার্নেল স্ট্যাকের মুখোমুখি হয়েছিল তা নির্গত করবে, এটি সবচেয়ে সাধারণ। আপনার যদি ডিফল্ট থেকে আরও (বা কম) স্ট্যাক ফ্রেমগুলির সাথে প্রয়োজন হয়

    @[ stack( 15 ) ] = count();

এটি একটি স্ট্যাক ফ্রেম 15 কল গভীর দেখায় show

সর্বশেষ কয়েকটি স্ট্যাকের চিহ্ন হ'ল যেখানে আপনার কার্নেল বেশিরভাগ সময় ব্যয় করছে। এটি তথ্যমূলক হতে পারে বা নাও হতে পারে।

এই স্ক্রিপ্টটি ব্যবহারকারী-স্পেস স্ট্যাক ট্রেসের জন্য একই কাজ করবে:

#!/usr/sbin/dtrace -s

profile:::profile-1001hz
/arg1/
{
    @[ ustack() ] = count();
}

এটি একইভাবে চালান:

... # ./userspacehotspots.d > /tmp/userspace_hot_spots.txt

ustack() কিছুটা ধীরে ধীরে - আসল ফাংশনটির নাম নির্গত করতে, ডিট্রেসকে উপযুক্ত প্রক্রিয়াগুলির ঠিকানা স্পেস থেকে এনে আরও অনেক বেশি কাজ করতে হবে।

সিস্টেমের স্বচ্ছতা সুরক্ষা অক্ষম করা আপনাকে স্ট্যাকের আরও ভাল ট্রেস পেতে সহায়তা করতে পারে।

আরও কিছু তথ্যের জন্য ডিট্রেস অ্যাকশন বুনিয়াদি দেখুন ।


ধন্যবাদ, আমি স্ক্রিপ্টগুলির ফলাফলের সাথে প্রশ্নটি আপডেট করেছি। ইউজারস্পেস স্ট্যাকের ট্রেস কম.ডোকার শাইপারকিট দেখায় প্রচুর থ্রেড তৈরি হয়।
জো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.