معیارهای کلیدی برای مانیتور کردن ActiveMQ

معیارهای کلیدی برای مانیتور کردن ActiveMQ

در بخش اول این مقاله به بررسی انواع ActiveMQ و تفاوت‌ها و ویژگی‌های شاخص آنها پرداختیم و در این بخش می‌خواهیم معیارهای کلیدی برای مانیتور کردن ActiveMQ را بررسی کنیم. 

با پیگیری معیارهای ActiveMQ، می‌توانید به طور موثری مصرف منابع، عملکرد broker و فعالیت پیام را مانیتور کنید. مانیتور کردن این معیارها می‎تواند به شما در درک عملکرد زیرساخت پیام رسانی و شناسایی مشکلات احتمالی که ممکن است بر خدمات شما تأثیر بگذارد کمک کند.

activemq_dash1

معیارهای 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 تأثیر بگذارد)، بنابراین باید معیارهای مصرف حافظه را در کنار موارد زیر نظر داشته باشید.

activemq_dash3

در مورد یک صف، ممکن است بتوانید با کوچک کردن ظرفیت مصرف‌کننده ی خود، 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 را بررسی خواهیم کرد.

activemq_dash2

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 جمع‌آوری کنید، بررسی و برخی از آنها را که برای مانیتور کردن بسیار ارزشمند هستند، توضیح دادیم و نشان دادیم که چگونه میشود از آنها برای برطرف‌کردن و پیشگیری از اشکال‌ها استفاده کرد.

پیشنهادات بیشتر سکان بلاگ برای شما