JSTATD(1) JDK Commands JSTATD(1)

jstatd - پایش ایجاد و خاتمه‌ی ماشین‌های مجازی مجهز به ابزاردقیق Java HotSpot

نکته: این دستور آزمایشی است و پشتیبانی نمی‌شود.

jstatd [options]

این بخش نمایانگر گزینه‌های خط فرمان jstatd است. بخش گزینه‌ها (OPTIONS) را ببینید.

دستور jstatd یک برنامه‌ی کارگزار RMI است که ایجاد و خاتمه‌ی ماشین‌های مجازی مجهز به ابزاردقیق (instrumented) جاوا هات‌اسپات (Java HotSpot) را پایش می‌کند و رابطی فراهم می‌سازد تا ابزارهای پایش از راه دور، نظیر jstat و jps، بتوانند به JVMهای در حال اجرا بر روی میزبان محلی متصل شده و اطلاعات مربوط به فرایند JVM را گردآوری نمایند.

کارگزار jstatd به یک رجیستری RMI (RMI registry) بر روی میزبان محلی نیاز دارد. کارگزار jstatd تلاش می‌کند به رجیستری RMI بر روی درگاه پیش‌فرض، یا درگاهی که با گزینه‌ی -p port مشخص می‌کنید، متصل گردد. اگر رجیستری RMI پیدا نشود، یک نمونه درون برنامه‌ی jstatd ایجاد می‌شود که به درگاه مشخص‌شده با گزینه‌ی -p port متصل (bound) می‌شود، یا در صورت قید نشدن گزینه‌ی -p port، به درگاه پیش‌فرض رجیستری RMI متصل می‌گردد. می‌توانید با مشخص کردن گزینه‌ی -nr از ایجاد رجیستری داخلی RMI جلوگیری کنید.

-nr
این گزینه در صورت پیدا نشدن رجیستری RMI موجود، تلاشی برای ایجاد رجیستری داخلی RMI درون فرایند jstatd نمی‌کند.
-p port
این گزینه شماره درگاهی را تعیین می‌کند که انتظار می‌رود رجیستری RMI در آن یافت شود؛ یا در صورت پیدا نشدن، چنانچه گزینه‌ی -nr مشخص نشده باشد، رجیستری بر روی آن ایجاد گردد.
-r rmiport
این گزینه شماره درگاهی را تعیین می‌کند که رابط اتصال (connector) RMI به آن متصل (bind) می‌شود. در صورت عدم تعیین، از یک درگاه تصادفی در دسترس استفاده خواهد شد.
-n rminame
این گزینه نامی را تعیین می‌کند که شیء دوردست (remote) RMI در رجیستری RMI تحت آن ثبت (bind) می‌شود. نام پیش‌فرض JStatRemoteHost است. اگر چندین کارگزار jstatd بر روی یک میزبان راه‌اندازی شوند، می‌توان با مشخص کردن این گزینه، نام شیء RMI صادرشده را برای هر کارگزار یکتا ساخت. با این حال، انجام این کار نیازمند آن است که نام یکتای کارگزار در رشته‌های hostid و vmid کارخواه پایشگر گنجانده شود.
-Joption
این گزینه یک گزینه‌ی جاوا (option) را به JVM ارسال می‌کند؛ به گونه‌ای که این گزینه یکی از موارد شرح داده شده در صفحه‌ی راهنمای راه‌انداز برنامه‌ی جاوا است. برای مثال، -J-Xms48m حافظه‌ی اولیه در هنگام راه‌اندازی را روی ۴۸ مگابایت تنظیم می‌کند. دستور java را ببینید.

کارگزار jstatd تنها می‌تواند JVMهایی را پایش کند که مجوزهای دسترسی محلی (native) مناسب را برای آن‌ها داشته باشد. بنابراین، فرایند jstatd باید با همان اعتبارسنجی کاربری (user credentials) که JVMهای هدف دارند اجرا شود. برخی از اعتبارهای کاربری، مانند کاربر ریشه (root) در سیستم‌عامل‌های Linux و macOS، مجوز دسترسی به ابزاردقیق‌های صادرشده توسط هر JVM روی سامانه را دارا هستند. فرایند jstatd که با چنین اعتباری اجرا شود می‌تواند هر JVM موجود در سامانه را پایش کند، اما نگرانی‌های امنیتی مضاعفی ایجاد خواهد کرد.

کارگزار jstatd هیچ‌گونه احراز هویتی برای کارخواه‌های راه دور ارائه نمی‌دهد. بنابراین، اجرای یک فرایند کارگزار jstatd، داده‌های ابزاردقیق صادرشده توسط تمام JVMهایی را که فرایند jstatd به آن‌ها مجوز دسترسی دارد، در معرض دید هر کاربری در شبکه قرار می‌دهد. این افشای اطلاعات ممکن است در محیط کاری شما نامطلوب باشد؛ بنابراین پیش از اجرای فرایند jstatd باید سیاست‌های امنیتی محلی را در نظر گرفت، به‌ویژه در محیط‌های عملیاتی (production) یا شبکه‌هایی که امن نیستند.

به منظور اهداف امنیتی، کارگزار jstatd از یک ObjectInputFilter در RMI بهره می‌برد تا تنها اجازه‌ی وا‌سریال‌سازی (deserialization) به کلاس‌های ضروری داده شود.

چنانچه نگرانی‌های امنیتی شما برطرف نمی‌شوند، امن‌ترین اقدام این است که کارگزار jstatd را اجرا نکرده و از ابزارهای jstat و jps به صورت محلی استفاده نمایید. با این وجود، هنگام استفاده از jps برای دریافت فهرست JVMهای دارای ابزاردقیق، این فهرست شامل JVMهایی که درون کانتینرهای docker اجرا می‌شوند نخواهد بود.

رابط صادرشده توسط فرایند jstatd اختصاصی (proprietary) است و تغییر آن حتمی خواهد بود. به کاربران و توسعه‌دهندگان اکیداً توصیه می‌شود از برنامه‌نویسی برای این رابط خودداری کنند.

در ادامه مثال‌هایی از اجرای دستور jstatd ارائه شده است. اسکریپت‌های jstatd به طور خودکار کارگزار را در پس‌زمینه راه‌اندازی می‌کنند.

این مثال نحوه‌ی شروع یک نشست jstatd را با یک رجیستری داخلی RMI نشان می‌دهد. این مثال فرض می‌کند که هیچ کارگزار دیگری به درگاه پیش‌فرض رجیستری RMI (درگاه 1099) متصل نیست.

jstatd

این مثال یک نشست jstatd را با یک رجیستری خارجی RMI راه‌اندازی می‌کند.


rmiregistry&
jstatd

این مثال یک نشست jstatd را با یک کارگزار رجیستری خارجی RMI روی درگاه 2020 راه‌اندازی می‌کند.


jrmiregistry 2020&
jstatd -p 2020

این مثال یک نشست jstatd را با یک کارگزار رجیستری خارجی RMI روی درگاه 2020 و اتصال‌دهنده‌ی JMX متصل به درگاه 2021 راه‌اندازی می‌کند.


jrmiregistry 2020&
jstatd -p 2020 -r 2021

این مثال یک نشست jstatd را با یک رجیستری خارجی RMI روی درگاه 2020 که به AlternateJstatdServerName متصل است راه‌اندازی می‌کند.


rmiregistry 2020&
jstatd -p 2020 -n AlternateJstatdServerName

این مثال یک نشست jstatd را راه‌اندازی می‌کند که در صورت پیدا نشدن رجیستری RMI، آن را ایجاد نمی‌کند. این مثال فرض می‌کند که یک رجیستری RMI از قبل در حال اجرا است. اگر رجیستری RMI در حال اجرا نباشد، پیام خطایی نمایش داده می‌شود.

jstatd -nr

این مثال یک نشست jstatd را با فعال بودن قابلیت ثبت وقایع (لاگ‌گیری) RMI راه‌اندازی می‌کند. این تکنیک به عنوان ابزاری کمکی برای عیب‌یابی یا پایش فعالیت‌های کارگزار کاربرد دارد.

jstatd -J-Djava.rmi.server.logCalls=true

2023 JDK 21