-
Bug
-
Resolution: Unresolved
-
Medium
-
None
-
7.13.0, 8.0.3, 7.13.18, 8.17.0, 8.5.15, 8.13.7
-
7.13
-
16
-
Severity 2 - Major
-
5
-
-
Issue Summary
Issue operations (view, update) or any issue post-processing can trigger serialising the issue with all the issue properties, including all issue attachment properties. Attachment meta data is stored in DB except for thumbnails which properties are retrieved directly from the shared file system.
Steps to Reproduce
- Create issue with no attachment
- Viewing issue or updating issue operations performance is good (<<1sec)
- Add to issue 1000 attachments
- Viewing issue or updating issue operations performance is no acceptable (>>10sec)
Each issue operation (view, update) can trigger 1000 x N calls to the shared file system.
Expected Results
Attachment thumbnails should not cause serious performance degradation on any issue operation.
Actual Results
Many threads (both HTTP user threads or other threads) hangs on shared file operations:
"http-nio-127.0.0.1-8080-exec-238 *** runnable java.lang.Thread.State: RUNNABLE at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createTempFile(File.java:2061) at com.atlassian.jira.issue.thumbnail.DefaultThumbnailManager.getTempFile(DefaultThumbnailManager.java:273) at com.atlassian.jira.issue.thumbnail.DefaultThumbnailManager.doGetThumbnail(DefaultThumbnailManager.java:171) at com.atlassian.jira.issue.thumbnail.DefaultThumbnailManager.getThumbnail(DefaultThumbnailManager.java:129) at sun.reflect.GeneratedMethodAccessor2136.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.atlassian.jira.config.component.SwitchingInvocationHandler.invoke(SwitchingInvocationHandler.java:38) at com.sun.proxy.$Proxy40.getThumbnail(Unknown Source) at com.atlassian.jira.issue.fields.rest.json.beans.AttachmentJsonBeanConverterImpl.shortBean(AttachmentJsonBeanConverterImpl.java:67) at com.atlassian.jira.issue.fields.rest.json.beans.AttachmentJsonBeanConverterImpl.shortBeans(AttachmentJsonBeanConverterImpl.java:42) at com.atlassian.jira.issue.fields.AttachmentSystemField.getJsonFromIssue(AttachmentSystemField.java:319) at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2.getRepresentationForFields(IssueBeanBuilder2.java:241) at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2.lambda$createFieldsDataFromOrderable$3(IssueBeanBuilder2.java:228) at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2$$Lambda$4982/881915241.apply(Unknown Source) at io.atlassian.fugue.Iterables$CollectingIterable$Iter.computeNext(Iterables.java:604) at io.atlassian.fugue.Iterators$Abstract.tryToComputeNext(Iterators.java:284) at io.atlassian.fugue.Iterators$Abstract.hasNext(Iterators.java:278) at com.google.common.collect.TransformedIterator.hasNext(TransformedIterator.java:42) at com.google.common.collect.Iterators.addAll(Iterators.java:357) at com.google.common.collect.Sets.newHashSet(Sets.java:276) at com.google.common.collect.Sets.newHashSet(Sets.java:259) at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2.createFieldsData(IssueBeanBuilder2.java:198) at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2.build(IssueBeanBuilder2.java:143) at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder.build(IssueBeanBuilder.java:63) at com.atlassian.jira.plugins.webhooks.serializer.IssueBeanFactory.createBean(IssueBeanFactory.java:37) at com.atlassian.jira.plugins.webhooks.serializer.IssueEventSerializer.putFields(IssueEventSerializer.java:61) at com.atlassian.jira.plugins.webhooks.serializer.IssueEventSerializer.putFields(IssueEventSerializer.java:28) at com.atlassian.jira.plugins.webhooks.serializer.AbstractJiraEventSerializer.serialize(AbstractJiraEventSerializer.java:28) at com.atlassian.webhooks.plugin.module.WebHookEventSerializer.serialize(WebHookEventSerializer.java:32) at com.atlassian.webhooks.plugin.PublishTaskFactoryImpl.getEventBody(PublishTaskFactoryImpl.java:67) at com.atlassian.webhooks.plugin.PublishTaskFactoryImpl.getPublishTask(PublishTaskFactoryImpl.java:61)
"http-nio-127.0.0.1-8080-exec-230 *** runnable
java.lang.Thread.State: RUNNABLE
at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242)
at java.io.File.exists(File.java:828)
at java.io.File.mkdirs(File.java:1377)
at com.atlassian.jira.issue.attachment.FileSystemAttachmentDirectoryAccessor.getAttachmentDirectory(FileSystemAttachmentDirectoryAccessor.java:103)
at com.atlassian.jira.issue.attachment.FileSystemAttachmentDirectoryAccessor.getThumbnailDirectory(FileSystemAttachmentDirectoryAccessor.java:60)
at com.atlassian.jira.issue.attachment.FileSystemAttachmentDirectoryAccessor.getThumbnailDirectory(FileSystemAttachmentDirectoryAccessor.java:48)
at com.atlassian.jira.issue.attachment.FileSystemThumbnailAccessor.getThumbnailFile(FileSystemThumbnailAccessor.java:45)
at com.atlassian.jira.issue.thumbnail.DefaultThumbnailManager.getThumbnailFile(DefaultThumbnailManager.java:198)
at com.atlassian.jira.issue.thumbnail.DefaultThumbnailManager.doGetThumbnail(DefaultThumbnailManager.java:160)
at com.atlassian.jira.issue.thumbnail.DefaultThumbnailManager.getThumbnail(DefaultThumbnailManager.java:129)
at com.atlassian.jira.issue.thumbnail.DefaultThumbnailManager.getThumbnail(DefaultThumbnailManager.java:121)
at sun.reflect.GeneratedMethodAccessor2950.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.atlassian.jira.config.component.SwitchingInvocationHandler.invoke(SwitchingInvocationHandler.java:38)
at com.sun.proxy.$Proxy40.getThumbnail(Unknown Source)
at com.atlassian.jira.issue.fields.renderer.wiki.embedded.RendererAttachmentManager.getThumbnail(RendererAttachmentManager.java:73)
at com.atlassian.renderer.embedded.EmbeddedImageRenderer.getThumbnail(EmbeddedImageRenderer.java:147)
at com.atlassian.renderer.embedded.EmbeddedImageRenderer.generateThumbnail(EmbeddedImageRenderer.java:158)
at com.atlassian.renderer.embedded.EmbeddedImageRenderer.renderResource(EmbeddedImageRenderer.java:99)
at com.atlassian.jira.issue.fields.renderer.wiki.embedded.JiraEmbeddedImageRenderer.renderResource(JiraEmbeddedImageRenderer.java:37)
at com.atlassian.renderer.embedded.DefaultEmbeddedResourceRenderer.renderResource(DefaultEmbeddedResourceRenderer.java:57)
at com.atlassian.jira.issue.fields.renderer.wiki.embedded.JiraEmbeddedResourceRenderer.renderResource(JiraEmbeddedResourceRenderer.java:37)
at com.atlassian.renderer.v2.components.AbstractEmbeddedRendererComponent.appendSubstitution(AbstractEmbeddedRendererComponent.java:39)
at com.atlassian.renderer.v2.components.AbstractNoTokenRegexRendererComponent.appendNoTokenSubstitution(AbstractNoTokenRegexRendererComponent.java:51)
at com.atlassian.renderer.v2.components.AbstractNoTokenRegexRendererComponent.regexRender(AbstractNoTokenRegexRendererComponent.java:34)
at com.atlassian.renderer.v2.components.AbstractEmbeddedRendererComponent.render(AbstractEmbeddedRendererComponent.java:20)
at com.atlassian.renderer.v2.V2Renderer.render(V2Renderer.java:45)
at com.atlassian.renderer.v2.V2SubRenderer.render(V2SubRenderer.java:36)
at com.atlassian.renderer.v2.components.block.BlockRendererComponent.renderParagraph(BlockRendererComponent.java:196)
at com.atlassian.renderer.v2.components.block.BlockRendererComponent.flushParagraph(BlockRendererComponent.java:191)
at com.atlassian.renderer.v2.components.block.BlockRendererComponent.render(BlockRendererComponent.java:114)
at com.atlassian.renderer.v2.V2Renderer.render(V2Renderer.java:45)
at com.atlassian.renderer.v2.V2SubRenderer.render(V2SubRenderer.java:36)
at com.atlassian.renderer.v2.components.list.ListItem.toHtml(ListItem.java:28)
at com.atlassian.renderer.v2.components.list.WikiList.toHtml(WikiList.java:42)
at com.atlassian.renderer.v2.components.list.ListItem.appendChildren(ListItem.java:42)
at com.atlassian.renderer.v2.components.list.ListRenderable.toHtml(ListRenderable.java:16)
at com.atlassian.renderer.v2.components.list.ListBlockRenderer.renderNextBlock(ListBlockRenderer.java:71)
at com.atlassian.renderer.v2.components.block.BlockRendererComponent.applyBlockRenderers(BlockRendererComponent.java:142)
at com.atlassian.renderer.v2.components.block.BlockRendererComponent.render(BlockRendererComponent.java:90)
at com.atlassian.renderer.v2.V2Renderer.render(V2Renderer.java:45)
at com.atlassian.renderer.v2.TokenEscapingV2Renderer.render(TokenEscapingV2Renderer.java:28)
at com.atlassian.renderer.v2.V2RendererFacade.convertWikiToXHtml(V2RendererFacade.java:83)
at com.atlassian.jira.issue.fields.renderer.wiki.AtlassianWikiRenderer.render(AtlassianWikiRenderer.java:58)
at com.atlassian.jira.issue.util.RendererWebPanelRenderUtil.<init>(RendererWebPanelRenderUtil.java:72)
at com.atlassian.jira.plugin.renderer.JiraRendererModuleDescriptorImpl.getEditVM(JiraRendererModuleDescriptorImpl.java:120)
at sun.reflect.GeneratedMethodAccessor1495.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
Workaround
Turn off thumbnails for attachments: https://confluence.atlassian.com/adminjiraserver/configuring-file-attachments-938847851.html
- is related to
-
JRASERVER-30068 Attachment thumbnails cause slow loading times in issue view
- Closed
-
JSDSERVER-6682 Issue loading is slow on Customer Portal if the issue has many attachment thumbnails
- Gathering Impact
-
JRASERVER-72533 Jira DC should expose some data about the performance of the shared file system
- Gathering Interest
- mentioned in
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...