Kanban boards are slow to load in Jira Software

Platform Notice: Data Center Only - This article only applies to Atlassian products on the Data Center platform.

Note that this KB was created for the Data Center version of the product. Data Center KBs for non-Data-Center-specific features may also work for Server versions of the product, however they have not been tested. Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

Summary

Problem

Kanban board takes a lot of time to load, specifically on the rest call http://<JIRA>/rest/greenhopper/1.0/xboard/work/allData.json?rapidViewId=<ID>&selectedProjectKey=<PROJ>

Diagnosis

Most of the time can be spent on following actions:

Calculating Card colors:

1 2 at com.atlassian.greenhopper.service.rapid.view.color.CardColorQueryServiceImpl.getCustomStrategyIssueCardColors(CardColorQueryServiceImpl.java:179) at com.atlassian.greenhopper.service.rapid.view.color.CardColorQueryServiceImpl.getCardColorsForQuery(CardColorQueryServiceImpl.java:108)

Calculating Days in column:

1 2 3 at com.atlassian.greenhopper.service.charts.IssueStatusHistoryServiceImpl.collectStatusHistory(IssueStatusHistoryServiceImpl.java:74) at com.atlassian.greenhopper.web.rapid.list.RapidIssueEntryQueryServiceImpl.loadDaysInColumn(RapidIssueEntryQueryServiceImpl.java:846) at com.atlassian.greenhopper.web.rapid.list.RapidIssueEntryQueryServiceImpl.collectIssues(RapidIssueEntryQueryServiceImpl.java:744)

Calculating Swimlanes:

1 2 3 4 5 6 at com.atlassian.greenhopper.service.issue.IssueDataServiceImpl.findImpl(IssueDataServiceImpl.java:166) at com.atlassian.greenhopper.service.issue.IssueDataServiceImpl.find(IssueDataServiceImpl.java:41) at com.atlassian.greenhopper.web.rapid.work.PoolServiceImpl.getSwimlaneIssueIds(PoolServiceImpl.java:240) at com.atlassian.greenhopper.web.rapid.work.PoolServiceImpl.getCustomSwimlanes(PoolServiceImpl.java:99) at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.loadSwimlanesData(WorkDataFactory.java:382) at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:178)

The following appears in Java thread-dump, this is one thread over-time:

1 2 3 4 5 6 7 8 9 10 11 jstack-2015-12-24_023408-6.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:126) jstack-2015-12-24_023413-7.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:145) jstack-2015-12-24_023417-8.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:162) jstack-2015-12-24_023421-9.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:162) jstack-2015-12-24_023426-10.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:162) jstack-2015-12-24_023431-11.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:162) jstack-2015-12-24_023435-12.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:178) jstack-2015-12-24_023440-13.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:178) jstack-2015-12-24_023444-14.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:178) jstack-2015-12-24_023449-15.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:178) jstack-2015-12-24_023453-16.txt- at com.atlassian.greenhopper.web.rapid.work.WorkDataFactory.getAllData(WorkDataFactory.java:178)

In the end, all actions are always related to very active Lucene activity::

1 2 3 4 5 6 7 8 9 10 11 12 13 14 "ajp-bio-127.0.0.1-19041-exec-172, unique_id=X, time=1450942446655, uri=/rest/greenhopper/1.0/xboard/work/allData.json" daemon prio=10 tid=0x00002afb30a93000 nid=0x98a runnable [x] java.lang.Thread.State: RUNNABLE at org.apache.lucene.store.DataInput.readVInt(DataInput.java:106) at org.apache.lucene.index.TermBuffer.read(TermBuffer.java:65) at org.apache.lucene.index.SegmentTermEnum.next(SegmentTermEnum.java:131) at org.apache.lucene.index.SegmentTermEnum.scanTo(SegmentTermEnum.java:166) at org.apache.lucene.index.TermInfosReader.get(TermInfosReader.java:273) at org.apache.lucene.index.TermInfosReader.get(TermInfosReader.java:209) at org.apache.lucene.index.SegmentReader.docFreq(SegmentReader.java:503) at org.apache.lucene.search.TermQuery$TermWeight$1.add(TermQuery.java:56) at org.apache.lucene.util.ReaderUtil$Gather.run(ReaderUtil.java:77) at org.apache.lucene.util.ReaderUtil$Gather.run(ReaderUtil.java:82) at org.apache.lucene.util.ReaderUtil$Gather.run(ReaderUtil.java:66) ...

Diagnosis

Environment

  • Large environment with large amount of Issues per project (more than 20k).

    Custom-Fields: 326

    Issues: 512512

    Projects: 512

Cause

  • Slow disk performance, test it with Testing Disk Access Speed

  • Very large number of issues at the board. Having more then 1000 issues will be slow to generate and to render and made board not practical to read. Please pay attention to "Done" column (In some cases the "Done" column had 7000 issues.)

  • Complex JQL queries in Swimlanes, Card Colors andBoard configuration

  • A third-party plugin such as Scriptrunner for Jira (version 7.2.0). Due to the new version of the scriptrunner add-on, 'import com.atlassian.jira.component.pico.ComponentAccessor' was no longer applicable for some scripted fields, as a result of which the boards with regard to the fields in which this occurred no longer loaded.

Solution

Workaround

None

Resolution

List of possible resolutions related to cause:

Updated on April 2, 2025

Still need help?

The Atlassian Community is here for you.