در بخش اول این مقاله به بررسی انواع ActiveMQ و تفاوتها و ویژگیهای شاخص آنها پرداختیم و در این بخش میخواهیم معیارهای کلیدی برای مانیتور کردن ActiveMQ را بررسی کنیم.
با پیگیری معیارهای ActiveMQ، میتوانید به طور موثری مصرف منابع، عملکرد broker و فعالیت پیام را مانیتور کنید. مانیتور کردن این معیارها میتواند به شما در درک عملکرد زیرساخت پیام رسانی و شناسایی مشکلات احتمالی که ممکن است بر خدمات شما تأثیر بگذارد کمک کند.
معیارهای ActiveMQ از موارد زیر میآیند:
- مقصد یا آدرس
- broker
- JVMی که broker در آن اجرا میشود.
- سیستم هاستی که JVM را اجرا میکند.
از آنجایی که ActiveMQ به زبان جاوا نوشته شده است، میتوانید از طریق اکستنشن های مدیریت جاوا (JMX) معیارهای مقصد، آدرس، broker و JVM را جستجو کنید. میتوانید این معیارها را با استفاده از JConsole، رابط کاربری گرافیکی موجود در JDK، یا سایر سیستمهای مانیتورینگ سازگار با JMX مشاهده کنید.
معیارهای مقصد و آدرس
ActiveMQ Classic و ActiveMQ Artemis از انواع مختلفی از endpointها برای هدایت پیامها به مصرفکنندگان استفاده میکنند. مانیتور کردن این endpointها (مقاصد و آدرسها) میتواند اطلاعاتی درباره ی سرعت، حجم و استفاده از منابع سیستم پیامرسانی به شما بدهد.
Metric type | MBean | Description | JMX attribute | Version |
Resource: Utilization | org.apache.activemq:type=Broker,brokerName=<MY_BROKER>,destinationType=(Queue|Topic),destinationName=<MY_DESTINATION> | Percentage of configured memory used by the destination | MemoryPercentUsage | Classic |
Resource: Utilization | org.apache.activemq.artemis:broker="<MY_BROKER>",component=addresses,address=<MY_ADDRESS> | Memory used (in bytes) by the address | AddressSize | Artemis |
Other | org.apache.activemq:type=Broker,brokerName=<MY_BROKER>,destinationType=(Queue|Topic),destinationName=<MY_DESTINATION> | The number of consumers currently subscribed to the destination | ConsumerCount | Classic |
Other | org.apache.activemq.artemis:broker="<MY_BROKER>",component=addresses,address=<MY_ADDRESS>,subcomponent=queues,routing-type=“anycast”,queue="<MY_QUEUE>" | The number of consumers consuming messages from the queue | ConsumerCount | Artemis |
Other | org.apache.activemq:type=Broker,brokerName=<MY_BROKER>,destinationType=(Queue|Topic),destinationName=<MY_DESTINATION> | The number of producers currently attached to the destination | ProducerCount | Classic |
Resource: Saturation | org.apache.activemq:type=Broker,brokerName=<MY_BROKER>,destinationType=(Queue|Topic),destinationName=<MY_DESTINATION> | The number of messages (per destination) that have not been acknowledged by a consumer. Includes those not yet dispatched | QueueSize | Classic |
Resource: Saturation | org.apache.activemq.artemis:broker="<MY_BROKER>",component=addresses,address=<MY_ADDRESS>,subcomponent=queues,routing-type=“anycast”,queue="<MY_QUEUE> | The number of messages currently in the queue. Includes scheduled, paged, and in-delivery messages | MessageCount | Artemis |
Other | org.apache.activemq:type=Broker,brokerName=<MY_BROKER>,destinationType=(Queue|Topic),destinationName=<MY_DESTINATION> | The number of messages in the destination that expired before they could be delivered | ExpiredCount | Classic |
Other | org.apache.activemq.artemis.addresses.<MY_BROKER>.addresses.queues.“anycast”.<MY_ADDRESS>,subcomponent=queues,routing-type=“anycast”,queue="<MY_QUEUE> | The number of messages in the queue that expired before they could be delivered | MessagesExpired | Artemis |
معیارهایی برای هشدار: AddressSize (Artemis) / MemoryPercentUsage (Classic)
معیار ActiveMQ Classic MemoryPercentUsage
درصدی از memoryLimit
مقصد در حال استفاده را نشان میدهد. اگر memoryLimit
را برای مقصد تعیین نکرده باشید، memoryUsage
پیکربندی شدهی broker را به ارث میبرد، و معیار MemoryPercentUsage
نشان دهنده درصدی از آن مقدار است که در حال حاضر توسط مقصد استفاده میشود.
معیار ActiveMQ Artemis AddressSize
، حافظه استفاده شده توسط آدرس را اندازه میگیرد.
با افزایش استفاده از حافظهی مقصد یا آدرس، ممکن است میزان ارسال پیام توسط تولیدکنندگان کاهش یابد. این به لطف کنترل جریان تولیدکننده (PFC) است که سرعت ارسال پیام توسط broker ها را در هر دو نسخه ActiveMQ کاهش میدهد.
PFC در ActiveMQ Classic زمانی فعال میشود که میزان استفاده از حافظهی مقصد برابر یا بالاتر از cursorMemoryHighWaterMark
باشد (که پیشفرض 70 درصد حافظهی موجود است که این درصد، یا محدودیت memoryUsage
broker یا، در صورت تعریف، memoryLimit
مقصد میباشد). میتوانید این مقدار را با افزودن یک ویژگی به عنصر PolicyEntry مربوطه در activemq.xml تغییر دهید. قطعه کد زیر نشان میدهد که چگونه cursorMemoryHighWaterMark
را روی 80 درصد حافظهی broker برای صفی به نام MY_QUEUE
و 50 درصد برای موضوعی به نام MY_TOPIC
تنظیم کنید.
activemq.xml
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="MY_BROKER">
[...]
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue="MY_QUEUE" cursorMemoryHighWaterMark="80" />
<policyEntry topic="MY_TOPIC" cursorMemoryHighWaterMark="50" />
</policyEntries>
</policyMap>
</destinationPolicy>
[...]
</broker>
برای اطلاعات بیشتر در مورد پیکربندی محدودیتهای حافظه در ActiveMQ Classic به مستندات ActiveMQ مراجعه کنید.
اگر از ActiveMQ Artemis استفاده میکنید، PFC زمانی فعال میشود که میزان استفاده از حافظه d آدرس به مقدار max-size-bytes
پیکربندی شدهی خود برسد. کد نمونهی زیر یک address-full-policyی BLOCK را به پیکربندیای که قبلا در این پست ایجاد کردیم اضافه میکند. این سیاست از ارسال پیام به این آدرس، در صورت اتمام حافظه جلوگیری میکند:
broker.xml
<address-settings>
<address-setting match="exampleQueue">
<max-size-bytes>10Mb</max-size-bytes>
<page-size-bytes>1Mb</page-size-bytes>
<address-full-policy>BLOCK</address-full-policy>
</address-setting>
</address-settings>
از هر نسخه ای از ActiveMQ که استفاده میکنید، PFC میتواند تأثیر قابل توجهی بر عملکرد سیستم پیام رسانی شما داشته باشد. اگر از ActiveMQ Classic استفاده میکنید، باید هشداری ایجاد کنید تا زمانی که مقدار MemoryPercentUsage
مقصد به مقدار cursorMemoryHighWaterMark
نزدیک میشود، به شما اطلاع دهد تا بتوانید قبل از فعال شدن PFC اقدام کنید. در ActiveMQ Artemis، باید هشداری ایجاد کنید که وقتی مقدار متریک AddressSize
یک آدرس به max-size-bytes
خود نزدیک میشود، فعال شود.
اگر از پیامرسانی point-to-point استفاده میکنید، میتوانید با کوچک کردن ظرفیت مصرفکنندهی خود برای حذف سریعتر پیامها، فشار حافظه را کاهش دهید. اگر سیستم پیامرسانی pub/sub شما از مشترکین دائمی استفاده میکند، مطمئن شوید که این مشتریان به اندازه کافی در دسترس هستند تا از انباشتگی پیامها جلوگیری شود. در هر صورت، افزایش حافظه ی در دسترس برای مقصد شما نیز کمک خواهد کرد.
معیارهایی که باید مانیتور شوند: ConsumerCount (تعداد مصرفکنندگان)
دیر یا زود، هر مقصد یا آدرسی باید پیامها را به مصرفکنندگان برساند. مصرفکنندگان ممکن است بیایند و بروند (به عنوان مثال، وقتی زیرساخت شما به صورت پویا متناسبسازی میشود)، و نوسان تعداد مصرفکنندگان میتواند در برخی موارد طبیعی باشد. شما باید بتوانید محدوده نرمال در تعداد مصرفکنندگان متصل را شناسایی کنید، و هر دو نسخهی ActiveMQ یک متریک ConsumerCount
تولید میکنند که میتوانید برای ناهنجاریها آن را مانیتور کنید. اگر مقدار ConsumerCount
شما به طور غیرمنتظرهای تغییر کند، ظرفیت مصرفکنندهی شما ممکن است بیشتر از حد معمول کاهش یافته باشد یا ممکن است برخی از هاستها در دسترس نباشند.
معیارهایی که باید مانیتور شوند: ProducerCount (تعداد تولید کنندگان)
این معیار تعداد تولیدکنندگانی را که در حال حاضر به یک broker ActiveMQ Classic متصل هستند، ردیابی میکند. اینکه ProducerCount
با مقدار صفر نشان دهنده یک مشکل باشد، بستگی به الگوی فعالیت مورد انتظار شما دارد. اگر تولیدکنندگان شما به طور معول فقط به صورت پراکنده فعال هستند (به عنوان مثال، اگر یک دسته از پیامها را یک بار در روز ارسال کنند)، این ممکن است طبیعی باشد. با این حال، اگر انتظار دارید همیشه تولیدکنندگان فعال داشته باشید، باید ProducerCount
صفر را بررسی کنید، زیرا میتواند نشان دهنده ی وقفه در خدمات باشد.
معیارهایی که باید مانیتور شوند: QueueSize (Classic) / MessageCount (Artemis)
این معیارها تعداد پیام هایی را که توسط مصرفکنندگان تایید نشدهاند، ردیابی میکند. اگر میبینید که این معیار به طور مداوم در حال افزایش است، میتواند نشان دهد که تولیدکنندگان پیامها را سریعتر از پردازش آنها توسط مصرفکنندگان منتشر میکنند، یا اینکه مصرفکنندگان پیامهای دریافتی خود را تایید نمیکنند. این میتواند باعث شود حافظهی مقصد یا آدرس تمام شود (که حتی میتواند بر عملکرد سایر مقصدها یا آدرسهای broker تأثیر بگذارد)، بنابراین باید معیارهای مصرف حافظه را در کنار موارد زیر نظر داشته باشید.
در مورد یک صف، ممکن است بتوانید با کوچک کردن ظرفیت مصرفکننده ی خود، QueueSize
یا MessageCount
را کاهش دهید تا هاستهای بیشتری برای خواندن از صف در دسترس باشند. در ActiveMQ Classic، در صورتی که مصرفکنندگان دائمی برای واکشی پیامها در دسترس نباشند، QueueSize
ممکن است افزایش یابد (شما میتوانید با کاهش زمان انقضای پیامهای جدید یا با حذف مشترکین دائمی که به طور مداوم در دسترس نیستند، به این موضوع رسیدگی کنید).
معیارهایی که باید مانیتور شوند : ExpiredCount (Classic) / MessagesExpired (Artemis)
این معیارها تعداد پیامهایی را نشان میدهند که قبل از تحویل منقضی شدهاند. اگر انتظار دارید همه پیامها در مدت زمان مشخصی تحویل و تایید شوند، میتوانید برای هر پیام یک انقضا تعیین کنید و بررسی کنید که آیا تعداد پیامهای در حال انقضا از صفر بالاتر رفته است یا خیر.
اگرچه در برخی موارد، پیامهای منقضی شده ممکن است نشانهای از مشکل نباشد. برای مثال، اگر محیط شما شامل مصرفکنندگانی با اشتراکهای بادوام اما شبکهای غیرقابل اطمینان باشد، ممکن است برخی از پیامها در حالی که ارتباط مشتریان قطع شده است منقضی شود. وقتی مصرفکنندگان دوباره وصل میشوند، همهی پیامهای منتشر شده را در این مدت درخواست میکنند، اما اگر برخی از این پیامها حاوی اطلاعاتی هستند که مرتب بهروزرسانی میشوند (مثلاً بهروزرسانی وضعیت در فواصل یک دقیقهای)، بهتر است آنها را نادیده بگیرید تا اینکه تحویل دهید.
معیارهای broker
همانطور که قبلا ذکر شد، broker ActiveMQ دارای محدودیتهای قابل تنظیم در میزان حافظه و فضای دیسک مجاز برای استفاده است. در ادامه برخی از معیارها وجود دارد که باید برای اطمینان از اینکه broker شما در محدودهی منابع خود به درستی کار میکند آنها را مانیتور کنید.
Metric type | MBean | Description | JMX attribute | Version |
Resource: Utilization | <org.apache.activemq:type=Broker,brokerName=<MY_BROKER | Percentage of available memory used by all destinations on the broker | MemoryPercentUsage | Classic |
Resource: Utilization | <org.apache.activemq.artemis:broker=<MY_BROKER | Percentage of the broker’s available memory (global-max-size) used by all the addresses on the broker | AddressMemoryUsagePercentage | Artemis |
Resource: Utilization | <org.apache.activemq:type=Broker,brokerName=<MY_BROKER | Percentage of available disk space (storeUsage) used for persistent message storage | StorePercentUsage | Classic |
Resource: Utilization | <org.apache.activemq.artemis:broker=<MY_BROKER | Percentage of total disk store used | DiskStoreUsage | Artemis |
Resource: Utilization | <org.apache.activemq:type=Broker,brokerName=<MY_BROKER | Percentage of available disk space (tempUsage) used for non-persistent message storage | TempPercentUsage | Classic |
Work: Throughput | <org.apache.activemq:type=Broker,brokerName=<MY_BROKER | The total number of messages sent to the broker | TotalEnqueueCount | Classic |
Work: Throughput | <org.apache.activemq.artemis:broker=<MY_BROKER | The total number of messages sent to the broker | TotalMessagesAdded | Artemis |
Work: Throughput | <org.apache.activemq:type=Broker,brokerName=<MY_BROKER | The total number of messages the broker has delivered to consumers | TotalDequeueCount | Classic |
Work: Throughput | <org.apache.activemq.artemis:broker=<MY_BROKER | The total number of messages consumers have acknowledged from all queues on this broker | TotalMessagesAcknowledged | Artemis |
Other | <org.apache.activemq:type=Broker,brokerName=<MY_BROKER | A count of topics currently attached to this broker | Topics | Classic |
Other | <org.apache.activemq:type=Broker,brokerName=<MY_BROKER | A count of queues currently attached to this broker | Queues | Classic |
Other | "<org.apache.activemq.artemis:broker="<MY_BROKER | The number of queues created on this server | QueueCount | Artemis |
Other | "<org.apache.activemq.artemis:broker="<MY_BROKER | The number of clients connected to the broker | ConnectionCount | Artemis |
معیارهایی برای هشدار: MemoryPercentUsage (Classic) (درصد استفاده از حافظه) / AddressMemoryUsagePercentage (Artemis) (درصد استفاده از حافظه آدرس)
اگر متوجه شدید که استفاده از حافظه ی یک broker در حال افزایش است، چند قدم وجود دارد که میتوانید برای جلوگیری از تأثیر محدودیت منابع بر عملکرد برنامهی خود بردارید.
- مصرفکنندگان خود را کاهش دهید. این میتواند نرخ مصرف پیامها را افزایش دهد و به broker اجازه میدهد حافظه و فضای دیسک را بازیابی کند.
- حافظهی در دسترس broker را افزایش دهید. برای انجام این کار، ممکن است لازم باشد میزان حافظهی اختصاص داده شده به JVM را افزایش دهید، که ممکن است نیاز به افزودن حافظه به هاست داشته باشد.
- حافظهی موجود برای مقاصد مرتبط با broker را کاهش دهید (مخصوصاً اگر تعداد مقصدهای زیادی دارید). اگرچه این کار broker را مجبور میکند تا پیامها را زودتر به دیسک ارسال کند، اما احتمال راهاندازی PFC را نیز کاهش میدهد و تولیدکنندگان را قادر میسازد تا به ارسال پیامها حتی زمانی که مصرفکنندگان عقب ماندهاند ادامه دهند. برای اطلاعات بیشتر به مستندات ActiveMQ مراجعه کنید.
اگر هاست شما علاوه بر ActiveMQ سرویسهای دیگری را نیز اجرا میکند، مقایسهی استفاده از حافظه ActiveMQ، با استفادهی کلی در سطح هاست، ممکن است به شما کمک کند محدودیتهای منابع را با بررسی نحوهی مصرف حافظه ی هاست، به طور خاص عیب یابی کنید.
معیارهایی برای هشدار: StorePercentUsage (Classic) / DiskStoreUsage (Artemis)
این معیار درصد فضای موجود دیسک است که توسط محل ذخیرهی پیام دائمی broker استفاده میشود. اگر مصرفکنندگان کند یا در دسترس نباشند و اگر پیامها زیاد باشند، broker میتواند به limit ذخیرهسازی دائمی خود برسد. مانیتور کردن این معیار بسیار مهم است زیرا اگر حافظهی دائمی یک broker تمام شود، PFC ممکن است باعث شود تولیدکنندگان، ارسال پیام را متوقف کنند.
معیارهایی که باید مانیتور شوند: TempPercentUsage
وقتی حافظهی یک بروکر ActiveMQ Classic برای ذخیره پیامهای غیر دائمی تمام میشود، آن پیامها را به یک مکان موقت در سیستم فایل منتقل میکند. اگر فضای ذخیره سازی موقت پر شود، تولیدکنندگان تا زمانی که فضای ذخیرهسازی آزاد نشود (با فرض فعال بودن PFC) ارسال پیام را متوقف میکنند.
ممکن است به هر دلیلی فضای ذخیرهسازی موقت شما تمام شود، از جمله:
- مصرف کنندگان کند یا غایب
- تعیین مقدار
tempUsage
که کوچکتر ازmemoryUsage
broker باشد. در این حالت حافظه، دادههای پیام بیشتری نسبت به فضای ذخیرهسازی موقت در خود نگه میدارد و به محض پر شدن حافظه و ارسال پیامها به محل ذخیرهی موقت،TempPercentUsage
از 100 درصد فراتر میرود. - تعیین یک مقدار
tempUsage
که کوچکتر ازjournalMaxFileLength
KahaDB است (که به طور پیش فرض 32 مگابایت است). این میتواند باعث پر شدن ذخیرهی موقت شود زیرا broker یک journal file 32 مگابایتی ایجاد میکند تا دادههای پیام را بدون توجه به مقدار این داده در حافظه نگهداری کند.
اگر PFC فعال شود، توان ارسال پیام شما کاهش مییابد، بنابراین مانیتور کردن مقدار TempPercentUsage
بسیار مهم است. قبل از اینکه TempPercentUsage
به 100 درصد برسد و PFC را فعال کند، باید در یک مقدار کمتری هشدار دهید که به شما زمان کافی برای حذف پیامها یا اضافه کردن فضای دیسک میدهد.
معیارهایی که باید مانیتور شوند: TotalEnqueueCount (Classic) / TotalMessagesAdded (Artemis) and TotalDequeueCount (Classic) / TotalMessagesAcknowledged (Artemis)
TotalEnqueueCount
و TotalMessagesAdded
تعداد پیامهای ارسال شده به broker را پیگیری میکنند. شما میتوانید این معیارها را برای درک حجم پیام های ارسال شده توسط تولید کنندگان خود بررسی کنید. TotalDequeueCount
و TotalMessagesAcknowledged
تعداد پیامهایی را نشان میدهند که توسط broker ارسال شده و توسط مصرف کنندگان شما تایید شده است. (همه ی این معیارها تعداد قابل جمعی هستند که در تمام مدتی که broker در حال اجرا بوده است محاسبه میشوند و با راه اندازی مجدد broker دوباره به صفر برمیگردد.)
برای درک حجم کلی پیام سیستم خود و میزان هماهنگی مصرف کنندگان با تولیدکنندگان، باید میزان پیامهای قرار گرفته را در کنار میزان خارج شده از صف کنترل کنید.
معیارهایی که باید مانیتور شوند: Topics and Queues (موضوعات و صفها) / QueueCount (تعداد صفها)
برای هر استقرار ActiveMQ تعداد درستی از موضوعات یا صف وجود ندارد، اما احتمالاً انتظاراتی در مورد اینکه چه چیزی برای محیط شما مناسب است دارید. میتوانید ActiveMQ Classic را برای مشاهده ی تعداد موضوعات و صفهای broker خود بررسی کنید و میتوانید تعداد کل صفها را در یک بروکر Artemis مشاهده کنید. این معیارها ممکن است به شما در رفع هرگونه رفتار نادرست، مانند پیامهای از دست رفته یا خطاهای تولیدکننده کمک کند که ممکن است این خطاها در صورت عدم دسترسی مطابق انتظار به مقصد، ایجاد شوند.
معیارهایی که باید مانیتور شوند: ConnectionCount
ممکن است تعداد تولیدکنندگان و مصرف کنندگان متصل به broker Artemis شما پویا باشند، اما این معیار میتواند برای عیب یابی مفید باشد. اگر ConnectionCount
به طور غیرمنتظره ای به صفر برسد، میتواند نشان دهنده ی یک مشکل شبکه باشد که مانع از دسترسی مشتریان به سرور ActiveMQ شما میشود.
معیارهای JVM
ActiveMQ در JVM اجرا میشود، بنابراین معیارهایی که به شما از سلامت JVM اطلاع میدهند میتوانند در مانیتور کردن پیامهای شما حیاتی باشند. در این بخش، برخی از معیارهای کلیدی JVM را بررسی خواهیم کرد.
Metric type | MBean | Description | JMX attribute |
Other | java.lang:type=GarbageCollector,name=(Copy|MarkSweepCompact|PS MarkSweep|PS Scavenge|G1 Old Generation|G1 Young Generation) | The total amount of time (in milliseconds) the JVM has spent executing garbage collection processes | CollectionTime |
Other
| java.lang:type=GarbageCollector,name=(Copy|MarkSweepCompact|PS MarkSweep|PS Scavenge|G1 Old Generation|G1 Young Generation) | The total count of garbage collection processes executed by the JVM | CollectionCount |
Resource: Utilization | java.lang:type=Memory | This contains values for the heap’s init, max, committed, and used metrics | HeapMemoryUsage |
Other | java.lang:type=Threading | Threads currently used by the JVM | ThreadCount |
معیارهایی برای هشدار: CollectionTime (زمان جمع آوری)
از آنجایی که ActiveMQ در JVM اجرا میشود، حافظهی آن توسط فرآیند جمع آوری زباله جاوا (GC) مدیریت میشود. یک برنامهی جاوای در حال اجرا برای ایجاد اشیایی که استفاده میکند به حافظه نیاز دارد و جمع کننده ی زبالهی جاوا به طور دورهای میزان استفاده از حافظه را ارزیابی میکند و حافظهی استفاده نشده را آزاد میکند. با افزایش حجم پیام ActiveMQ، حافظهی بیشتری مصرف خواهد کرد. در نتیجه، JVM جمعآوری زباله را به دفعات بیشتری اجرا میکند، که میتواند به طور کلی باعث کند شدن پیامرسانی شود.
میتوانید از JMX برای کوئری معیارهایی استفاده کنید که کل زمان صرف شده برای جمع آوری زباله را نشان میدهند. هر زمانی که JVM روی GC صرف کند، تأثیری روی برنامههای در حال اجرا در آنجا خواهد داشت (مانند ActiveMQ)، اگرچه ممکن است همیشه قابل درک نباشد. معیارهای GC تجمعی هستند، بنابراین باید انتظار داشته باشید که به طور مداوم افزایش پیدا کنند و تنها زمانی که JVM راه اندازی مجدد شود، به صفر برمیگردند. شما باید از یک ابزار مانیتورینگ برای پیگیری تعداد دفعات جمعآوری زباله و مدت زمان انجام هر فرآیند استفاده کنید.
معیارهایی که باید مانیتور شوند: HeapMemoryUsage
معیار HeapMemoryUsage یک شی JSON است که از مقادیر init
، committed
، max
و used
تشکیل شده است.
init
هنگام شروع JVM تنظیم میشود و مقدار اولیهی حافظهی پشتهی موجود را مشخص میکند.max
مقدار حداکثر اندازهی ممکن پشته را نگه میدارد.committed
توسط JVM تنظیم میشود و نوسان دارد. این مقدار نشان میدهد که چه مقدار حافظهی تضمینی برای استفادهی JVM در دسترس است.used
نشان دهندهی مقدار حافظهی پشتهی JVMاست که در حال حاضر استفاده میشود.
شما باید used
و committed
را با هم مانیتور کنید تا اطمینان حاصل کنید که حافظهی JVM تمام نمیشود. اگر حافظهی JVM تمام شود، جاوا یک استثنا OutOfMemoryError
ایجاد میکند. برای راهنمایی در مورد حل این مشکل به مستندات جاوا و سؤالات متداول ActiveMQ مراجعه کنید.
معیارهایی که باید مانیتور شوند: ThreadCount (تعداد رشتههای پردازشی)
پیامرسانی همزمان (Synchronous) به تعداد رشتههای بیشتری نسبت به ارسال ناهمزمان (asynchronous) نیاز دارد. استفاده از thread های بیشتر باعث میشود که broker هزینههای اضافی سوئیچ کردن context را متحمل شود که به فعالیت بیشتری از CPU هاست نیاز دارد. این میتواند باعث کاهش سرعت در صف و ارسال پیامها شود و در نهایت منجر به کاهش توان ارسال پیام شود.
همانطور که در مستندات ActiveMQ توضیح داده شده است، میتوانید تعداد رشتههای مورد نیاز ActiveMQ Classic را با استفاده از Thread Pooling، فعال کردن ارسال بهینه در صفهای خود یا استفاده از پروتکل NIO کاهش دهید.
معیارهای سطح هاست
هاست شما پایه و اساس تمام فرآیندهای درگیر در فعالیتهای پیام رسانی ActiveMQ است. برای درک مشکلاتی که ممکن است به وجود بیاید، و برای تصمیم گیری آگاهانه در مورد زمان کاهش مقیاس، به معیارهای سطح هاست خود نگاه کنید.
Name | Description | Metric type |
---|---|---|
Disk usage | The percentage of the host’s available disk space currently in use | Resource: Utilization |
Disk I/O | The rate of read and write operations per second | Resource: Utilization |
معیارهایی برای هشدار: Disk usage (استفاده از دیسک)
ActiveMQ از فضای دیسک برای ذخیرهی پیامهای دائمی و همچنین پیامهای غیر دائمی استفاده میکند که با پر شدن حافظه، روی دیسک صفحهبندی میشوند. پس از اینکه یک پیام توسط یک مصرفکننده تایید شد، ActiveMQ Classic آن را در طی یک پاکسازی دورهای حذف میکند. ActiveMQ Artemis به طور خودکار صف هایی را که هیچ پیام و مشترکی ندارند، حذف میکند. (به طور پیش فرض، هر دو نسخه، چرخه ی پاکسازی خود را هر 30 ثانیه انجام میدهند.)
اگر TotalEnqueueCount
یک broker کلاسیک بیشتر از TotalDequeueCount
آن باشد، یا اگر نرخ TotalMessagesAdded
یک بروکر Artemis از TotalMessagesAcknowledged
پیشی بگیرد، دیسک هاست شما ممکن است پر شود. میتوانید معیارهای میزان استفاده از دیسک در سطح هاست را با معیارهای TempPercentUsage
و StorePercentUsage
در ActiveMQ Classic و معیار DiskStoreUsage
در Artemis مرتبط کنید تا بررسی کنید که دیسک شما بهجای فایلهای گزارش یک فرآیند غیرمرتبط، با دادههای پیام پر میشود. میتوانید یک هشدار پیش بینی ایجاد کنید تا به شما اطلاع دهد که فضای دیسک هاست شما تمام شده است تا بتوانید به موقع برای جلوگیری از مشکلات پرفورمنس اقدام کنید.
معیارهایی که باید مانیتور شوند: Disk I/O (ورودی/خروجی دیسک)
broker های ActiveMQ Classic پیامها را روی دیسک در یک محل ذخیرهی پیام و یک محل ذخیرهی موقت ذخیره میکنند. به طور مشابه، broker های Artemis ممکن است با پر شدن حافظه، دادههای پیام را در دیسک صفحهبندی کنند. در نتیجه، broker های مختلف در یک هاست ممکن است برای شانس نوشتن پیامها روی دیسک رقابت کنند. افزایش ورودی/خروجی دیسک میتواند منجر به این شود که عملیات نوشتن به حالت انتظار رود و به طور کلی توان پیام رسانی را کاهش دهد.
اگر فعالیت دیسک بالایی میبینید، میتواند به این معنی باشد که broker شما بسیار شلوغ است، به خصوص اگر MemoryPercentUsage
(در ActiveMQ Classic) یا AddressSize
(در Artemis) بالایی را نیز مشاهده کنید. اگر چنین است، باید با ایجاد شبکهای از broker های ActiveMQ Classic یا خوشهای از سرورهای Artemis، فعالیت پیام رسانی را در چند گره توزیع کنید.
معنا بخشیدن به معیارها
معیارهای ActiveMQ میتواند به شما کمک کند زیرساخت پیامرسانی خود را به طور فعال حفظ کنید و اطلاعاتی را که برای بررسی خطاها، پیامهای از دست رفته و تأخیر غیرمنتظره نیاز دارید در اختیار شما قرار دهد.
جمعبندی
در این مقاله معیارهایی را که میتوانید از ActiveMQ جمعآوری کنید، بررسی و برخی از آنها را که برای مانیتور کردن بسیار ارزشمند هستند، توضیح دادیم و نشان دادیم که چگونه میشود از آنها برای برطرفکردن و پیشگیری از اشکالها استفاده کرد.