jstatd(1) Monitoring Tools jstatd(1)

jstatd - ماشین‌های مجازی جاوا (JVM) را پایش کرده و امکان اتصال ابزارهای پایش از راه دور به آن‌ها را فراهم می‌کند. این دستور آزمایشی است و پشتیبانی نمی‌شود.

jstatd [ options ]
گزینه‌های خط فرمان. بخش گزینه‌ها را ببینید.

دستور jstatd یک برنامه سرور RMI است که ایجاد و خاتمه ماشین‌های مجازی مجهز‌شده Java HotSpot را پایش می‌کند و رابطی را فراهم می‌آورد تا ابزارهای نظارت از راه دور بتوانند به JVMهای در حال اجرا بر روی میزبان محلی متصل شوند.

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


در صورتی که رجیستری RMI موجود یافت نشود، تلاشی برای ایجاد رجیستری داخلی RMI درون فرآیند jstatd انجام نمی‌دهد.

شماره درگاهی که انتظار می‌رود رجیستری RMI در آن یافت شود، یا در صورت عدم وجود، چنانچه گزینه -nr مشخص نشده باشد در آن ایجاد شود.

نامی که شیء RMI از راه دور در رجیستری RMI با آن مقید (bind) می‌شود. نام پیش‌فرض JStatRemoteHost است. اگر چندین سرور jstatd بر روی یک میزبان راه‌اندازی شوند، نام شیء RMI اکسپورت‌شده برای هر سرور می‌تواند با مشخص کردن این گزینه یکتا گردد. با این حال، انجام این کار مستلزم آن است که نام یکتای سرور در رشته‌های hostid و vmid کلاینت نظارتی گنجانده شود.

گزینه option را به JVM ارسال می‌کند، که در آن option یکی از گزینه‌های شرح‌داده‌شده در صفحه راهنمای راه‌انداز برنامه جاوا است. برای مثال، -J-Xms48m حافظه هنگام راه‌اندازی را روی ۴۸ مگابایت تنظیم می‌کند. java(1) را ببینید.

سرور jstatd تنها می‌تواند JVMهایی را پایش کند که مجوزهای دسترسی بومی (native) مناسب را برای آن‌ها داشته باشد. بنابراین، فرآیند jstatd باید با همان اعتبارنامه‌های کاربری ماشین‌های مجازی هدف اجرا شود. برخی از اعتبارنامه‌های کاربری، مانند کاربر ریشه (root) در سیستم‌های مبتنی بر یونیکس، مجوز دسترسی به داده‌های تشخیصی ارائه‌شده توسط هر JVM در سیستم را دارند. یک فرآیند jstatd که با چنین اعتبارنامه‌هایی اجرا می‌شود می‌تواند هر JVM در سیستم را پایش کند، اما نگرانی‌های امنیتی بیشتری به همراه خواهد داشت.

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

سرور jstatd در صورتی که مدیر امنیت دیگری نصب نشده باشد، نمونه‌ای از RMISecurityPolicy را نصب می‌کند و در نتیجه، نیازمند تعیین یک فایل خط‌مشی امنیتی (security policy file) است. این فایل باید با Default Policy Implementation and Policy File Syntax در نشانی http://docs.oracle.com/javase/8/docs/technotes/guides/security/PolicyFiles.html مطابقت داشته باشد.

فایل خط‌مشی زیر به سرور jstatd اجازه می‌دهد تا بدون هیچ استثنای امنیتی اجرا شود. این خط‌مشی محدودتر از اعطای تمام مجوزها به تمام کدهای مبدأ است، اما نسبت به خط‌مشی که حداقل مجوزها را برای اجرای سرور jstatd اعطا می‌کند بازتر است.

grant codebase "file:${java.home}/../lib/tools.jar" {   
    permission java.security.AllPermission;
};

برای استفاده از این تنظیم خط‌مشی، این متن را در فایلی به نام jstatd.all.policy ذخیره کرده و سرور jstatd را به صورت زیر اجرا کنید:

jstatd -J-Djava.security.policy=jstatd.all.policy

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

رابط ارائه‌شده توسط فرآیند jstatd اختصاصی است و تضمین شده که در آینده تغییر کند. به کاربران و توسعه‌دهندگان توصیه می‌شود برای این رابط برنامه‌نویسی نکنند.

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

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

jstatd -J-Djava.security.policy=all.policy

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

rmiregistry&
jstatd -J-Djava.security.policy=all.policy

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

jrmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020

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

rmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020
    -n AlternateJstatdServerName

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

jstatd -J-Djava.security.policy=all.policy -nr

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

jstatd -J-Djava.security.policy=all.policy
    -J-Djava.rmi.server.logCalls=true

•
java(1)
•
jps(1)
•
jstat(1)
•
rmiregistry(1)
21 November 2013 JDK 8