ডকার পাত্রে প্রস্থান করার কারণটি কীভাবে জানবেন?


110

আমার কাছে 1 জি র‌্যামের হোস্টে একটি ডকার কন্টেইনার চলছে (একই হোস্টে অন্যান্য পাত্রেও চলছে)। এই ডকার পাত্রে অ্যাপ্লিকেশনটি কিছু চিত্র ডিকোড করবে, যা মেমরির অনেকটা গ্রাস করতে পারে।

সময়ে সময়ে, এই ধারকটি প্রস্থান করবে। আমি সন্দেহ করি এটি স্মৃতিশক্তি হারিয়ে যাওয়ার কারণে হয়েছে তবে খুব নিশ্চিত নয়। এর মূল কারণ খুঁজতে আমার একটি পদ্ধতি দরকার। তাহলে এই ধারকের মৃত্যুর জন্য কী ঘটেছিল তা জানার কোনও উপায় আছে?


6
আপনি যে ধারকটির মাধ্যমে লগগুলি চেক করতে পারেন docker logs <container-id>
টেকটাবু

4
তবে ধারকটি বেরিয়ে গেছে, আমি মনে করি আমি এটি আর লগ করতে পারি না?
লি বিন

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

আপনি কমপক্ষে চেষ্টা করেছেন?
টেকটাবু

টেকটাবু, হ্যাঁ আমি করেছি। এটি কোনওভাবেই সহায়তা করে না
লি বিন

উত্তর:


127

অন্যরা docker logs $container_idআবেদনের আউটপুট দেখতে উল্লেখ করেছেন । এটি সর্বদা আমার প্রথম জিনিস যাচাই করা হবে।

এর পরে, আপনি docker inspect $container_idরাজ্যের বিবরণ দেখতে একটি চালাতে পারেন , উদাহরণস্বরূপ:

    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 2,
        "Error": "",
        "StartedAt": "2016-06-28T21:26:53.477229071Z",
        "FinishedAt": "2016-06-28T21:26:53.478066987Z"
    },

সেখানে গুরুত্বপূর্ণ লাইনটি "ওমকিল্ড" রয়েছে যা আপনি ধারক মেমরির সীমা ছাড়িয়ে গেলে এবং ডকার আপনার অ্যাপ্লিকেশনটিকে মেরে ফেললে সত্য হবে। এটি আপনার অ্যাপ্লিকেশন দ্বারা প্রস্থান করার জন্য কোনও কারণ সনাক্ত করে কিনা তা দেখতে আপনিও প্রস্থান কোডটি দেখতে চাইতে পারেন।

দ্রষ্টব্য, এটি কেবল তখনই নির্দেশ করে যদি ডকার নিজেই আপনার প্রক্রিয়াটিকে হত্যা করে এবং আপনার ধারকটিতে একটি মেমরি সীমা নির্ধারণ করা দরকার। ডকারের বাইরে লিনাক্স কার্নেল আপনার প্রক্রিয়াটি লোল করতে পারে যদি হোস্ট নিজেই স্মৃতিশক্তি হারিয়ে ফেলে। লিনাক্স প্রায়শই লগ-ইন / var / log এ লিখলে এটি ঘটে। উইন্ডোজ এবং ম্যাকের ডকার ডেস্কটপ এর সাহায্যে আপনি ডকার সেটিংসে এম্বেড থাকা লিনাক্স ভিএম-তে বরাদ্দ হওয়া মেমরিটি সামঞ্জস্য করতে পারেন।


9
আমি বুঝতে পারি না যেহেতু আমার ধারকটি চলে গেছে, "পরিদর্শন" কীভাবে কাজ করবে? উপরের আলোচনা থেকে, একবার অ্যাপটি মারা গেলে ধারকটিও মারা যাবে dies আপনি মানে একই চিত্রটি আবার চালু করুন তারপরে পরিদর্শন করবেন?
লি বিন

10
@ লাইবিনে কোনও কন্টেইনার মারা যাওয়ার পরে মুছে ফেলবে না, এটি কেবল স্ট্যাটাস = থামানো বা বেরিয়ে যাওয়ার মতো স্থগিত হয়ে যায়। 'ডকার PS -a' এবং নিজের জন্য দেখুন
স্যামুয়েল তো

আমি প্রতিবার মেমরি নিবিড় অপারেশন চালাচ্ছি এবং ওমকিডটি মিথ্যা ছিল। ক্রমবর্ধমান স্মৃতি এটিকে আবার কাজ করে তোলে।
Andrei

4
লিনাক্স কার্নেল, ডকার ইঞ্জিনের পরিবর্তে, ধারকটিতে প্রক্রিয়াগুলি মেরে ফেললে এটি ঘটতে পারে। আপনি প্রায়শই দেখতে পাবেন যে ওএসে হোস্টটিতে / var / লগের নিচে লগ হয়।
বিএমচ

6

লগগুলি পড়ে কনটেইনারটির প্রক্রিয়াটি OOM কিল্ড ছিল কিনা তা আপনি জানতে পারবেন। ওওমকিলগুলি কার্নেল দ্বারা শুরু করা হয়েছিল তাই প্রতিবার এটি ঘটলে লাইনগুলির একটি গুচ্ছ থাকে /var/log/kern.log, উদাহরণস্বরূপ:

python invoked oom-killer: gfp_mask=0x14000c0(GFP_KERNEL), nodemask=(null), order=0, oom_score_adj=995
oom_kill_process+0x22e/0x450
Memory cgroup out of memory: Kill process 31204 (python) score 1994 or sacrifice child
Killed process 31204 (python) total-vm:7350860kB, anon-rss:4182920kB, file-rss:2356kB, shmem-rss:0kB

এই উত্তরটি আমাকে এমন কোনও ধারকটিতে যা ভুল তা খুঁজে পেতে সহায়তা করেছে যা ডকার বাইরে বেরোনোর ​​পরে পুনরায় চালু হবে (ডকার পরিদর্শন এখানে খুব বেশি সহায়তা করে না)।
এম 90

0

যদিও স্বীকৃত উত্তরটি সেরা বিকল্প, তবে কখনও কখনও হোস্টের কাছ থেকে জার্নালের সামগ্রীটিও (লিনাক্সে) পরিদর্শন করা কার্যকর হতে পারে।

আপনি টাইপ করে এটি করতে পারেন:

sudo journalctl -u docker

বা এটি লেজ

sudo journalctl -u docker -f

অথবা যদি আপনার টার্মিনাল বাফারের জন্য এটি দীর্ঘ হয় তবে আউটপুটটিকে কম পাইপিং করুন

journalctl -xn -u docker | less
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.