jstatd(1) Monitoring Tools jstatd(1)

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

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

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

کارگزار jstatd به یک رجیستری RMI روی میزبان محلی نیاز دارد. کارگزار jstatd تلاش می‌کند به رجیستری RMI روی درگاه پیش‌فرض، یا درگاهی که با گزینه -pport مشخص کرده‌اید متصل شود. اگر رجیستری RMI پیدا نشود، یک نمونه در داخل برنامه jstatd ایجاد شده و به درگاه مشخص‌شده توسط گزینه -pport، یا در صورت عدم استفاده از این گزینه، به درگاه پیش‌فرض رجیستری RMI مقید (bind) می‌شود. با تعیین گزینه -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 باید با همان اعتبار کاربری JVMهای هدف اجرا شود. برخی از اعتبارهای کاربری، مانند کاربر root در سیستم‌های مبتنی بر یونیکس، مجوز دسترسی به تجهیزات صادرشده توسط هر JVM در سیستم را دارند. فرآیند jstatd که با چنین اعتباری اجرا شود می‌تواند تمام JVMهای سیستم را پایش کند، اما نگرانی‌های امنیتی بیشتری به همراه خواهد داشت.

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

کارگزار jstatd در صورتی که هیچ مدیر امنیتی (security manager) دیگری نصب نشده باشد، نمونه‌ای از RMISecurityPolicy را نصب می‌کند و در نتیجه به تعیین یک فایل خط‌مشی امنیتی نیاز دارد. این فایل باید با پیاده‌سازی پیش‌فرض خط‌مشی و نحو فایل خط‌مشی در 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 (IP address spoofing) قرار دارند. در صورتی که نگرانی‌های امنیتی شما با یک فایل خط‌مشی سفارشی برطرف نمی‌شود، امن‌ترین اقدام این است که کارگزار jstatd را اجرا نکرده و از ابزارهای jstat و jps به صورت محلی استفاده نمایید.

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

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

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

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

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

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

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

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

این مثال یک نشست jstatd را با یک رجیستری خارجی RMI روی درگاه ۲۰۲۰ که به 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 را با قابلیت‌های فعال ثبت گزارش (logging) 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