Вам необходимо понять основы производительности ... Часть работы либо выполняется (с использованием ЦП), либо ожидает - без использования ЦП.
Если нет работы, то поток будет быть в ожидании. Внутренне он может просыпаться, периодически проверять состояние и go снова переходить в спящий режим. В этом случае «горячие» процедуры, использующие ЦП, будут связаны с синхронизацией. Обычно приложение MQ выполняет синхронизированное ожидание - MQGET WAIT в течение 10 секунд - поэтому вы увидите, что «находятся в состоянии TIMED_WAITING.»
Если вы видите, что потоки находятся в состоянии ожидания - тогда вам нужно Узнайте, почему сообщения не доставляются в ваши темы. Если ваши потоки заняты и тратят более 25% на использование ЦП - возможно, вы захотите проверить, почему они используют так много ЦП, например, выполняют ли они преобразование или расшифровку данных.
Некоторые основы I Предположим, что эти темы потребляют сообщения. Есть ли сообщения, которые он может потреблять - например, отображать полноту очереди. Если оно меньше 10 - тогда некоторые ваши темы будут ждать. Если curdepth больше 10, тогда все потоки должны иметь возможность запускать и обрабатывать сообщения.
Являются ли сообщения постоянными или непостоянными. Если они не являются постоянными, то запись на диск не ведется, и получение сообщения должно занимать миллисекунды, поэтому вы должны видеть сотни сообщений в секунду, обрабатываемых в очереди. Если они являются постоянными, запись в журнал на диске будет выполняться либо при выходе из syncpoint, либо при фиксации - это может составлять 1-10 (или более) миллисекунд. Так что ваша задача будет тратить большую часть своего времени на ожидание.
Спуск по уровню. В зависимости от вашей версии MQ. Если вы выполняете посылку или получение постоянных сообщений вне точки синхронизации (в распределенном MQ), то блокируется доступ к запросу для сериализации доступа к очереди. Это может ограничить вас до 100 сообщений в секунду. См. Здесь https://developer.ibm.com/messaging/2018/04/24/implicit-syncpointing-persistent-messages-put-outside-syncpoint/
Вам также необходимо подумать о том, являются ли сообщения «получить указанными c» или «получить любые». Например, ваше приложение выполняет MQPUT для сервера, а затем ждет ответа. (Так называемый запрос-ответ или модель клиента). Даже если в очереди есть сообщения, ваша ветка будет ожидать определенного сообщения c. если ваше приложение является сервером, «получите первое сообщение в очереди, обработайте его и отправьте ответ обратно». Тогда Любое доступное сообщение может быть обработано.