{"id":467,"date":"2016-01-25T14:15:16","date_gmt":"2016-01-25T14:15:16","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2016\/01\/25\/the-jstack-utility\/"},"modified":"2017-12-17T13:10:29","modified_gmt":"2017-12-17T13:10:29","slug":"the-jstack-utility","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/the-jstack-utility\/","title":{"rendered":"The jstack Utility | jstack Tutorial | scmGalaxy"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3159 size-full\" src=\"http:\/\/www.scmgalaxy.com\/tutorials\/wp-content\/uploads\/2016\/01\/the-jstack-utility.png\" alt=\"jstack-utility\" width=\"600\" height=\"400\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2016\/01\/the-jstack-utility.png 600w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2016\/01\/the-jstack-utility-300x200.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">The release of JDK 8 introduced Java Mission Control, Java Flight Recorder, and\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jcmd<\/code>\u00a0utility for diagnosing problems with JVM and Java applications. It is suggested to use the latest utility,\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jcmd<\/code>\u00a0instead of the previous\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jstack<\/code>\u00a0utility for enhanced diagnostics and reduced performance overhead.<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">The following sections describe troubleshooting techniques with\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jstack<\/code>\u00a0utility.<\/p>\n<p><a id=\"BABFCHDE\" name=\"BABFCHDE\"><\/a><\/p>\n<ul style=\"margin-left: 13px; padding-left: 0px; line-height: 1.9; font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px;\">\n<li style=\"margin-left: 13px; padding-left: 0px; list-style-image: url('https:\/\/docs.oracle.com\/javase\/webdesign\/pubs8\/im\/ul_bullet.gif');\"><a id=\"BABFCHDE\" name=\"BABFCHDE\"><\/a>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\"><a id=\"BABFCHDE\" name=\"BABFCHDE\"><\/a><a style=\"text-decoration: none; color: #3a87cf;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/troubleshoot\/tooldescr016.html#BABEHDDH\" target=\"_blank\" rel=\"noopener\">Troubleshoot with jstack Utility<\/a><\/p>\n<\/li>\n<li style=\"margin-left: 13px; padding-left: 0px; list-style-image: url('https:\/\/docs.oracle.com\/javase\/webdesign\/pubs8\/im\/ul_bullet.gif');\">\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\"><a style=\"text-decoration: none; color: #3a87cf;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/troubleshoot\/tooldescr016.html#BABFDFDH\" target=\"_blank\" rel=\"noopener\">Force a Stack Dump<\/a><\/p>\n<\/li>\n<li style=\"margin-left: 13px; padding-left: 0px; list-style-image: url('https:\/\/docs.oracle.com\/javase\/webdesign\/pubs8\/im\/ul_bullet.gif');\">\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\"><a style=\"text-decoration: none; color: #3a87cf;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/troubleshoot\/tooldescr016.html#BABBAIJC\" target=\"_blank\" rel=\"noopener\">Stack Trace from a Core Dump<\/a><\/p>\n<\/li>\n<li style=\"margin-left: 13px; padding-left: 0px; list-style-image: url('https:\/\/docs.oracle.com\/javase\/webdesign\/pubs8\/im\/ul_bullet.gif');\">\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\"><a style=\"text-decoration: none; color: #3a87cf;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/troubleshoot\/tooldescr016.html#BABJBDFC\" target=\"_blank\" rel=\"noopener\">Mixed Stack<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a id=\"BABEHDDH\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\" name=\"BABEHDDH\"><\/a><\/p>\n<div id=\"JSTGD213\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\">\n<h2 style=\"margin: 3px 0px 0px; padding: 0px; font-size: 1.3em; line-height: 2.5em;\">2.16.1\u00a0Troubleshoot with jstack Utility<\/h2>\n<p style=\"margin-left: 0px; margin-top: 2px; margin-bottom: 17px;\">The\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jstack<\/code>\u00a0command-line utility attaches to the specified process or core file and prints the stack traces of all threads that are attached to the virtual machine, including Java threads and VM internal threads, and optionally native stack frames. The utility also performs deadlock detection.<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">The utility can also use the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jsadebugd<\/code>\u00a0daemon to query a process or core file on a remote machine.\u00a0<i>Note:<\/i>\u00a0The output takes longer to print in this case.<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">A stack trace of all threads can be useful in diagnosing a number of issues, such as deadlocks or hangs.<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">The\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">-l<\/code>\u00a0option, which instructs the utility to look for ownable synchronizers in the heap and print information about\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">java.util.concurrent.locks<\/code>. Without this option, the thread dump includes information only on monitors.<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\"><a id=\"BABEHDDH\" name=\"BABEHDDH\"><\/a>The output from the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jstack<\/code>\u00a0pid\u00a0option is the same as that obtained by pressing Ctrl+\\ at the application console (standard input) or by sending the process a QUIT signal. See\u00a0<a style=\"text-decoration: none; color: #3a87cf;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/troubleshoot\/tooldescr019.html#BABCDJFE\" target=\"_blank\" rel=\"noopener\">Control+Break Handler<\/a>\u00a0for an output example.<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">Thread dumps can also be obtained programmatically using the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">Thread.getAllStackTraces<\/code>\u00a0method, or in the debugger using the debugger option to print all thread stacks (the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">where<\/code>\u00a0command in the case of the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jdb<\/code>\u00a0sample debugger).<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">For more details on the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jstack<\/code>\u00a0utility, see the\u00a0<a style=\"text-decoration: none; color: #3a87cf;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/unix\/jstack.html\" target=\"_blank\" rel=\"noopener\"><code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #09569d;\">jstack<\/code>\u00a0command man page<\/a>.<\/p>\n<\/div>\n<p><a id=\"BABFDFDH\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\" name=\"BABFDFDH\"><\/a><\/p>\n<div id=\"JSTGD214\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\">\n<h2 style=\"margin: 3px 0px 0px; padding: 0px; font-size: 1.3em; line-height: 2.5em;\">2.16.2\u00a0Force a Stack Dump<\/h2>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\"><a id=\"BABFDFDH\" name=\"BABFDFDH\"><\/a>If the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jstack<\/code>\u00a0pid\u00a0command does not respond because of a hung process, then the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">-F<\/code>\u00a0option can be used (on Oracle Solaris and Linux operating systems only) to force a stack dump, as shown in\u00a0<a style=\"text-decoration: none; color: #3a87cf;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/troubleshoot\/tooldescr016.html#BABBBDIG\" target=\"_blank\" rel=\"noopener\">Example 2-29<\/a>.<\/p>\n<div id=\"JSTGD215\">\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">Example 2-29 Force a Stack Dump with jstack Utility<\/p>\n<pre dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444; margin-left: 40px;\" xml:space=\"preserve\">$ <code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace;\">jstack -F 8321<\/code> Attaching to process ID 8321, please wait... Debugger attached successfully. Client compiler detected. JVM version is 1.6.0-rc-b100 Deadlock Detection: Found one Java-level deadlock: ============================= \"Thread2\": waiting to lock Monitor@0x000af398 (Object@0xf819aa10, a java\/lang\/String), which is held by \"Thread1\" \"Thread1\": waiting to lock Monitor@0x000af400 (Object@0xf819aa48, a java\/lang\/String), which is held by \"Thread2\" Found a total of 1 deadlock. Thread t@2: (state = BLOCKED) Thread t@11: (state = BLOCKED) - Deadlock$DeadlockMakerThread.run() @bci=108, line=32 (Interpreted frame) Thread t@10: (state = BLOCKED) - Deadlock$DeadlockMakerThread.run() @bci=108, line=32 (Interpreted frame) Thread t@6: (state = BLOCKED) Thread t@5: (state = BLOCKED) - java.lang.Object.wait(long) @bci=-1107318896 (Interpreted frame) - java.lang.Object.wait(long) @bci=0 (Interpreted frame) - java.lang.ref.ReferenceQueue.remove(long) @bci=44, line=116 (Interpreted frame) - java.lang.ref.ReferenceQueue.remove() @bci=2, line=132 (Interpreted frame) - java.lang.ref.Finalizer$FinalizerThread.run() @bci=3, line=159 (Interpreted frame) Thread t@4: (state = BLOCKED) - java.lang.Object.wait(long) @bci=0 (Interpreted frame) - java.lang.Object.wait(long) @bci=0 (Interpreted frame) - java.lang.Object.wait() @bci=2, line=485 (Interpreted frame) - java.lang.ref.Reference$ReferenceHandler.run() @bci=46, line=116 (Interpreted frame)<\/pre>\n<\/div>\n<p><a id=\"BABBBDIG\" name=\"BABBBDIG\"><\/a><\/p>\n<\/div>\n<p><a id=\"BABBBDIG\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\" name=\"BABBBDIG\"><\/a><a id=\"BABBAIJC\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\" name=\"BABBAIJC\"><\/a><\/p>\n<div id=\"JSTGD216\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\">\n<h2 style=\"margin: 3px 0px 0px; padding: 0px; font-size: 1.3em; line-height: 2.5em;\">2.16.3\u00a0Stack Trace from a Core Dump<\/h2>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\"><a id=\"BABBAIJC\" name=\"BABBAIJC\"><\/a>To obtain stack traces from a core dump, execute the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jstack<\/code>\u00a0command on a core file, as shown in\u00a0<a style=\"text-decoration: none; color: #3a87cf;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/troubleshoot\/tooldescr016.html#BABGHEJB\" target=\"_blank\" rel=\"noopener\">Example 2-30<\/a>.<\/p>\n<div id=\"JSTGD217\">\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">Example 2-30 Stack Trace from a Core Dump<\/p>\n<pre dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444; margin-left: 40px;\" xml:space=\"preserve\">$ jstack $JAVA_HOME\/bin\/java core<\/pre>\n<\/div>\n<p><a id=\"BABGHEJB\" name=\"BABGHEJB\"><\/a><\/p>\n<\/div>\n<p><a id=\"BABGHEJB\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\" name=\"BABGHEJB\"><\/a><a id=\"BABJBDFC\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\" name=\"BABJBDFC\"><\/a><\/p>\n<div id=\"JSTGD218\" style=\"font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-size: 12px; line-height: 18px;\">\n<h2 style=\"margin: 3px 0px 0px; padding: 0px; font-size: 1.3em; line-height: 2.5em;\">2.16.4\u00a0Mixed Stack<\/h2>\n<p style=\"margin-left: 0px; margin-top: 2px; margin-bottom: 17px;\">The\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jstack<\/code>\u00a0utility can also be used to print a mixed stack; that is, it can print native stack frames in addition to the Java stack. Native frames are the C\/C++ frames associated with VM code and JNI\/native code.<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\"><a id=\"BABJBDFC\" name=\"BABJBDFC\"><\/a>To print a mixed stack, use the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">-m<\/code>\u00a0option, as shown in\u00a0<a style=\"text-decoration: none; color: #3a87cf;\" href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/troubleshoot\/tooldescr016.html#BABJAEAC\" target=\"_blank\" rel=\"noopener\">Example 2-31<\/a>.<\/p>\n<div id=\"JSTGD219\">\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">Example 2-31 Mixed Java Stack with jstack Utility<\/p>\n<pre dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444; margin-left: 40px;\" xml:space=\"preserve\">$ <code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace;\">jstack -m 21177<\/code> Attaching to process ID 21177, please wait... Debugger attached successfully. Client compiler detected. JVM version is 1.6.0-rc-b100 Deadlock Detection: Found one Java-level deadlock: ============================= \"Thread1\": waiting to lock Monitor@0x0005c750 (Object@0xd4405938, a java\/lang\/String), which is held by \"Thread2\" \"Thread2\": waiting to lock Monitor@0x0005c6e8 (Object@0xd4405900, a java\/lang\/String), which is held by \"Thread1\" Found a total of 1 deadlock. ----------------- t@1 ----------------- 0xff2c0fbc __lwp_wait + 0x4 0xff2bc9bc _thrp_join + 0x34 0xff2bcb28 thr_join + 0x10 0x00018a04 ContinueInNewThread + 0x30 0x00012480 main + 0xeb0 0x000111a0 _start + 0x108 ----------------- t@2 ----------------- 0xff2c1070 ___lwp_cond_wait + 0x4 0xfec03638 bool Monitor::wait(bool,long) + 0x420 0xfec9e2c8 bool Threads::destroy_vm() + 0xa4 0xfe93ad5c jni_DestroyJavaVM + 0x1bc 0x00013ac0 JavaMain + 0x1600 0xff2bfd9c _lwp_start ----------------- t@3 ----------------- 0xff2c1070 ___lwp_cond_wait + 0x4 0xff2ac104 _lwp_cond_timedwait + 0x1c 0xfec034f4 bool Monitor::wait(bool,long) + 0x2dc 0xfece60bc void VMThread::loop() + 0x1b8 0xfe8b66a4 void VMThread::run() + 0x98 0xfec139f4 java_start + 0x118 0xff2bfd9c _lwp_start ----------------- t@4 ----------------- 0xff2c1070 ___lwp_cond_wait + 0x4 0xfec195e8 void os::PlatformEvent::park() + 0xf0 0xfec88464 void ObjectMonitor::wait(long long,bool,Thread*) + 0x548 0xfe8cb974 void ObjectSynchronizer::wait(Handle,long long,Thread*) + 0x148 0xfe8cb508 JVM_MonitorWait + 0x29c 0xfc40e548 * java.lang.Object.wait(long) bci:0 (Interpreted frame) 0xfc40e4f4 * java.lang.Object.wait(long) bci:0 (Interpreted frame) 0xfc405a10 * java.lang.Object.wait() bci:2 line:485 (Interpreted frame) ... more lines removed here to reduce output... ----------------- t@12 ----------------- 0xff2bfe3c __lwp_park + 0x10 0xfe9925e4 AttachOperation*AttachListener::dequeue() + 0x148 0xfe99115c void attach_listener_thread_entry(JavaThread*,Thread*) + 0x1fc 0xfec99ad8 void JavaThread::thread_main_inner() + 0x48 0xfec139f4 java_start + 0x118 0xff2bfd9c _lwp_start ----------------- t@13 ----------------- 0xff2c1500 _door_return + 0xc ----------------- t@14 ----------------- 0xff2c1500 _door_return + 0xc<\/pre>\n<\/div>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">Frames that are prefixed with an asterisk (*) are Java frames, whereas frames that are not prefixed with an asterisk are native C\/C++ frames.<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">The output of the utility can be piped through\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">c++filt<\/code>\u00a0to demangle C++ mangled symbol names. Because the Java HotSpot VM is developed in the C++ language, the\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">jstack<\/code>\u00a0utility prints C++ mangled symbol names for the Java HotSpot internal functions.<\/p>\n<p style=\"margin-left: 0px; margin-top: 3px; margin-bottom: 17px;\">The\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">c++filt<\/code>\u00a0utility is delivered with the native C++ compiler suite:\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">SUNWspro<\/code>\u00a0on Oracle Solaris operating system and\u00a0<code dir=\"ltr\" style=\"font-family: 'Courier New', Monaco, Courier, monospace; color: #444444;\">gnu<\/code>\u00a0on Linux.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The release of JDK 8 introduced Java Mission Control, Java Flight Recorder, and\u00a0jcmd\u00a0utility for diagnosing problems with JVM and Java applications. It is suggested to use the latest utility,\u00a0jcmd\u00a0instead of&#8230; <\/p>\n","protected":false},"author":1,"featured_media":3159,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[49],"tags":[1307,173,1301,1308,1304,1309,1303,1306,1305,1302],"class_list":["post-467","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general","tag-install-jstack","tag-java","tag-jstack","tag-jstack-options","tag-jstack-tool","tag-jstack-tutorial","tag-jstack-utility","tag-thread-dump","tag-troubleshoot-with-jstack-utility","tag-utility"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=467"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/467\/revisions"}],"predecessor-version":[{"id":3298,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/467\/revisions\/3298"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3159"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}