আমি যে ধরণের স্ট্রেস সুইচগুলি ব্যবহার করি তা হ'ল এটি।
strace -ffttT -p pid -o /tmp/strace.out
এর একটি উদাহরণ দেখতে হবে,
19:35:57.485493 mprotect(0x7f35e7472000, 16384, PROT_READ) = 0 <0.000037>
19:35:57.485599 mprotect(0x7f35e7692000, 4096, PROT_READ) = 0 <0.000030>
19:35:57.485697 mprotect(0x7f35e78b7000, 4096, PROT_READ) = 0 <0.000030>
19:35:57.485782 munmap(0x7f35e7896000, 129588) = 0 <0.000037>
19:35:57.485875 set_tid_address(0x7f35e78949d0) = 10730 <0.000029>
19:35:57.485960 set_robust_list(0x7f35e78949e0, 0x18) = 0 <0.000024>
19:35:57.486048 futex(0x7fff8f58628c, FUTEX_WAKE_PRIVATE, 1) = 0 <0.000025>
19:35:57.486131 futex(0x7fff8f58628c, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, 7f35e7894700) = -1 EAGAIN (Resource temporarily unavailable) <0.000024>
আপনি সিস্টেম কলের ডানদিকে সময়ের পার্থক্য দেখান যে এটি দেখায় যে একটি সিস্টেম কল থেকে অন্য সিস্টেমে যেতে কত সময় লেগেছে।
এটি আপনাকে সিস্টেম কলগুলির মধ্যে সময়ের পার্থক্যটি ধরবে। সুতরাং, যখন আপনি দেখবেন যে একটি সিস্টেম কলের পরবর্তী সিস্টেম কলের সাথে বেশ কয়েক সেকেন্ডের ব্যবধান রয়েছে, তখন সেখানে এটি কিছুটা শব্দ করছে।
আরেকটি পদ্ধতি হ'ল এটি gcore দিয়ে coredump করা। তবে এর জন্য জিডিবির মাধ্যমে নেভিগেট করার জন্য একটু অভিজ্ঞতা দরকার।
তবে, যদি থ্রেডটি কার্নেল থ্রেড হয়, তবে আপনি এটিকে স্ট্রেস বা কর্ডার্প করতে পারবেন না। সেক্ষেত্রে আমাদের আরও জটিল কিছু ব্যবহার করতে হবে। RHEL5 কার্নেল-এ, আমরা অপ্রোফিল ব্যবহার করি। RHEL6 এ আমরা পারফ ব্যবহার করি। আমি অপ্রোফিলের চেয়ে পারফেক্ট পছন্দ করি। সিস্টেমের কল দেখায় যেখানে সিপিইউর সর্বাধিক শতাংশ ব্যবহার করা হচ্ছে সেগুলি দেখায় নিখুঁত ডেটা সংগ্রহ করা যেতে পারে format
একটি পরীক্ষার পারফ সঙ্গে, আমি এটি দেখতে।
38.06% swapper [kernel.kallsyms] [k] mwait_idle_with_hints ↑
29.45% swapper [kernel.kallsyms] [k] read_hpet
4.90% swapper [kernel.kallsyms] [k] acpi_os_read_port ▒
4.74% swapper [kernel.kallsyms] [k] hpet_next_event
এটি কার্নেল ফাংশনটি দেখায় যেখানে 38% সিপিইউ সময় ব্যয় করা হচ্ছে। এখন, আমরা ফাংশনটি যাচাই করতে পারি এবং এটি কী করছে এবং এটি করার কথা বলে।
কয়েকটি উদাহরণ সহ, এটি এতটা কঠিন নয়।