আমি kill -3
JVM এর থ্রেড ডাম্প ইউনিক্সে দেখতে কমান্ডটি ব্যবহার করছি । তবে এই kill
কমান্ডের আউটপুট আমি কোথায় খুঁজে পাব? আমি হারিয়ে গেলাম !!
আমি kill -3
JVM এর থ্রেড ডাম্প ইউনিক্সে দেখতে কমান্ডটি ব্যবহার করছি । তবে এই kill
কমান্ডের আউটপুট আমি কোথায় খুঁজে পাব? আমি হারিয়ে গেলাম !!
উত্তর:
আপনি থ্রেড ডাম্প নিতে এবং যেখানে খুশি সেখানে আউটপুট লিখতে বিকল্পভাবে jstack (JDK সহ অন্তর্ভুক্ত) ব্যবহার করতে পারেন। এটি কি ইউনিক্স পরিবেশে পাওয়া যায় না?
jstack PID > outfile
থ্রেড ডাম্প সিস্টেমটিতে VM এর বাইরে লেখা থাকে যা আপনি চালিত করেছিলেন kill -3
। আপনি যদি কোনও ফাইলে JVM এর কনসোল আউটপুট পুনর্নির্দেশ করে থাকেন তবে থ্রেড ডাম্পটি সেই ফাইলে থাকবে। যদি জেভিএম ওপেন কনসোলে চলছে তবে থ্রেড ডাম্পটি এর কনসোলটিতে প্রদর্শিত হবে।
লগভিএমআউটপুট ডায়াগনস্টিক বিকল্পের সাহায্যে ব্রেক সিগন্যালে জেভিএম থ্রেড ডাম্প আউটপুট পুনর্নির্দেশ করার উপায় রয়েছে :
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log
ছবিতে জাভা 8 সহ, jcmd
পছন্দসই পদ্ধতি।
jcmd <PID> Thread.print
নীচে ওরাকল ডকুমেন্টেশন থেকে স্নিপেট রয়েছে :
জেডিকে 8-এর রিলিজে জাভা মিশন নিয়ন্ত্রণ, জাভা ফ্লাইট রেকর্ডার এবং জেভিএম এবং জাভা অ্যাপ্লিকেশনগুলির সমস্যা নির্ণয়ের জন্য জিসিএমডি ইউটিলিটি চালু করা হয়েছে। উন্নত ডায়াগোনস্টিকস এবং হ্রাস কার্যকারিতা ওভারহেডের জন্য পূর্ববর্তী জেস্ট্যাক ইউটিলিটির পরিবর্তে সর্বশেষতম ইউটিলিটি, জিসিএমডি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।
যাইহোক, অ্যাপ্লিকেশনটি দিয়ে এই শিপিংয়ের লাইসেন্সিং ইমপ্লিকেশনগুলি হতে পারে যা আমি নিশ্চিত নই।
jcmd
উইন্ডোজ পরিষেবা প্রক্রিয়ার সাথে সংযোগ করতে ব্যর্থ সঙ্গে com.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
যখন jstack -F
: সফল stackoverflow.com/questions/1197912/...
জেভিএমের স্টাডআউটটি একই স্থানে স্থাপন করা হয়েছে। আপনার যদি টমকেট সার্ভার থাকে তবে এটি catalina_(date).out
ফাইল হবে।
কিল -3 ব্যবহার করার সময় স্ট্যান্ডার্ড আউটপুটে থ্রেড ডাম্প দেখতে পাওয়া উচিত। বেশিরভাগ অ্যাপ্লিকেশন সার্ভার একটি পৃথক ফাইলে স্ট্যান্ডার্ড আউটপুট লেখেন। কিল -3 ব্যবহার করার সময় আপনার এটি খুঁজে পাওয়া উচিত। থ্রেড ডাম্প পাওয়ার একাধিক উপায় রয়েছে:
kill -3 <PID>
: স্ট্যান্ডার্ড আউটপুট এ আউটপুট দেয়।হটস্পট ভিএম এর জন্য আমরা jstack
একটি থ্রেড ডাম্প তৈরি করতে কমান্ডও ব্যবহার করতে পারি । এটি জেডিকে-র একটি অংশ। সিনট্যাক্সটি নিম্নরূপ:
Usage:
jstack [-l] <pid> (to connect to running process)
jstack -F [-m] [-l] <pid>(to connect to a hung process)
- For JRockit JVM we can use JRCMD command which comes with JDK Syntax:
jrcmd <jrockit pid> [<command> [<arguments>]] [-l] [-f file] [-p] -h]
kill -3 <PID>
হত্যা করা উচিত নয়। আপনি কোন ধরণের জাভা অ্যাপটি দেখছেন?
আপনি যদি আপনার স্ট্যান্ডলোন জাভা প্রক্রিয়াটির থ্রেড ডাম্প চান তবে আপনার যে পদক্ষেপগুলি অনুসরণ করা উচিত
পদক্ষেপ 1: জাভা প্রোগ্রামে কল করা শেল স্ক্রিপ্টের জন্য প্রক্রিয়া আইডি পান
linux$ ps -aef | grep "runABCD"
user1 **8535** 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17796 17372 0 08:15:41 pts/49 0:00 grep runABCD
পদক্ষেপ 2: সন্তানের জন্য প্রক্রিয়া আইডি পান যা রান এএবিসিডি দ্বারা চালিত হয়েছিল। বাচ্চাদের পেতে উপরের পিআইডি ব্যবহার করুন।
linux$ ps -aef | grep **8535**
user1 **8536** 8535 0 Mar 25 ? 126:38 /apps/java/jdk/sun4/SunOS5/1.6.0_16/bin/java -cp /home/user1/XYZServer
user1 8535 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17977 17372 0 08:15:49 pts/49 0:00 grep 8535
পদক্ষেপ 3: নির্দিষ্ট প্রক্রিয়াটির জন্য জেএসট্যাক পান। আপনার এক্সওয়াইএসবার সার্ভারের প্রক্রিয়া আইডি পান। অর্থাৎ 8536
linux$ jstack **8536** > threadDump.log