How to increase the timeout for the server when the PACS takes too long to respond

Increasing the timeout of the server when the PACS is slow to respond

Issue:

If everything is set up (I.e. You can search for studies and see thumbnails in the study browser), then it may be the server timing out because the PACS took to long to respond. By default, the server waits for 10 seconds to hear from the PACS. The following are steps to change the time out value to 60 seconds or 60000 milliseconds.

Steps:

Warning It is strongly recommended that you backup your xml files before you attempt any of these changes.
  1. SSH into the server or use the configuration web pages to access when logged in as admin.

  2. Select Settings > Advanced.

  3. Edit the dicomqr-plugin.xml file.

  4. Add the following bean:

    <property name="dimseRspTimeout" value="60000"/>

     

    Example
    * <property name="name" value="dicomqr"/>
    * <property name="address" value="$\{dicomqr.query.address}"/>
    * <property name="storageAddress" value="$\{dicomqr.storage.address}"/>
    * <property name="dimseRspTimeout" value="60000"/>
    Save your changes, and reload the appropriate plugins for the changes to take effect.
  5. Validate by trying to load a study.

Should you wish to try deeper configuration options that there are some advanced configuration options that may resolve the issue:

 

  • Some PACS may be slow to accept associations. This can cause images (like thumbnails) to fail to transfer. We can increase a parameter called acceptTimeout. This variable controls the time between A-ASSOCIATE-RQ to A-ASSOCIATE-AC. If the PACS is slow to send an association to accept message a timeout will occur and the images that would have been requested over that association will be not transferred.The system's default value is 5000ms. (5 Seconds). Its XML representation is as follows:

    <property name="acceptTimeout" value="10000"/>
  • Some networks attempt to optimize network traffic by grouping many small packets into one larger packet. This is called buffering. A network that attempts to buffer data as an optimization may break the DICOM communications protocol. We can set a flag in our software to disable this buffering of data. This variable can be set through the configuration files and is called tcpNoDelay. Its XML representation is as follows:

    <property name="tcpNoDelay" value="false" />

Both of these parameters are added to the appropriate dicom plugin for the connection they attempt to modify. Knowledge of java beans and XML is required to change these settings and should be left to qualified personnel as incorrect modifications can break the system.

For a standard dicom repository, the dicomqr-plugin.xml file must be modified and the property bean added to the correct child. These XML configuration beans are accessed from the administrator's advanced menu option.

Warning It is strongly recommended that you backup your xml files before you attempt any of these changes.
Standard DICOM Repository Configuration Bean Illustrating Child Properties
<bean class="pureweb.plugins.dicomqr.StandardDicomRepository" id="uuid-c9622b4d-207c-4702-9bab-757d54842f0d">
<description>Implements the pureweb.dicom.DicomRepository interface that allows the dicom web service to query a standard DICOM PACS.</description>
<property name="name" value="data-standard" />
<property name="address" value="${uuid-c9622b4d-207c-4702-9bab-757d54842f0d.query.address}" />
<property name="storageAddress" value="${uuid-c9622b4d-207c-4702-9bab-757d54842f0d.storage.address}" />
<property name="patientQueryLimit" value="0" />
<property name="studyQueryLimit" value="0" />
<property name="seriesQueryLimit" value="0" />
<property name="instanceQueryLimit" value="0" />
<property name="instanceFilters">
<list>
<bean class="pureweb.plugins.dicomqr.SopClassUIDInstanceFilter" />
</list>
</property>
<property name="extendedNegotiation" value="true" />
<property name="responseTimeout" value="5000" />
<property name="acceptTimeout" value="30000" />
<property name="patientIDFormat" value="" />
<property name="cfindCharacterSet" value="" />
</bean>

 

There are a few timeouts that can be configured for DICOM communications. These are declared in Java as public methods which can be set via java beans.

These timeouts are separated into two layers of the DICOM stack. (Network and Application)

Name Description Default Value

connectTimeout

Timeout in ms for a TCP/IP connection to be indicated. No timeout by default.

None

requestTimeout

Timeout in ms for receiving a A-ASSOCIATE-RQ. Upon receiving an incoming TCP/IP connection, an A-ASSOCIATE-RQ message must be received.

5 Seconds

acceptTimeout

The time between an A-ASSOCIATE-RQ and the A-ASSOCIATE-AC, A-ASSOCIATE-RJ or A-ABORT.

5 Seconds

releaseTimeout

The time between the RELEASE-RQ and RELEASE-RP.

5 Seconds

socketCloseDelay

Timeout in ms for Socket close after sending A-ABORT. This allows time for data in the output transmit buffer to transmit and be received by the peer before the close is done. This makes sure messages are completely sent and received before the connection is dropped.

50 milliseconds

Tbl. 2. Timeouts defined in java Network Application Entity

Name Description Default Value

dimseRspTimeout

The timeout in milliseconds for receiving DIMSE-RSP on an open association.

60 Seconds

retrieveRspTimeout

The timeout in milliseconds for receiving DIMSE-RSP for an open C-GET or C-MOVE request. Other types of associations use the dimseRspTimeout

60 Seconds

It is recommended to review the documentation on the DICOM Finite State Machine. This is documented in PS3.8 Network Communications Support for Message Exchange