[go: up one dir, main page]

WO2016121077A1 - Dump file generation method and dump file generation device - Google Patents

Dump file generation method and dump file generation device Download PDF

Info

Publication number
WO2016121077A1
WO2016121077A1 PCT/JP2015/052611 JP2015052611W WO2016121077A1 WO 2016121077 A1 WO2016121077 A1 WO 2016121077A1 JP 2015052611 W JP2015052611 W JP 2015052611W WO 2016121077 A1 WO2016121077 A1 WO 2016121077A1
Authority
WO
WIPO (PCT)
Prior art keywords
dump
memory
child
parent
child process
Prior art date
Application number
PCT/JP2015/052611
Other languages
French (fr)
Japanese (ja)
Inventor
雄一郎 青木
博泰 西山
Original Assignee
株式会社日立製作所
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社日立製作所 filed Critical 株式会社日立製作所
Priority to PCT/JP2015/052611 priority Critical patent/WO2016121077A1/en
Publication of WO2016121077A1 publication Critical patent/WO2016121077A1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures

Definitions

  • the present invention relates to a method for generating a dump file output by a computer program.
  • program a computer program that runs on a computer system
  • program collects a memory dump of the memory used by the program, and investigate the cause. It is common to elucidate.
  • the memory dump means that the contents of the memory at a certain moment are written in a file (dump file), and this writing process is called a dump.
  • the memory dump generation time will also be longer.
  • the shorter the memory dump generation time the shorter the service stop time. Therefore, it is strongly desired to shorten the memory dump generation time.
  • the demand is particularly remarkable in an enterprise computer system having a large capacity memory.
  • the following is an example of a memory dump output by a Java virtual machine that runs a program written in the Java (registered trademark) language widely used in enterprise computer systems that support the foundation of society such as online financial processing.
  • the present invention can be applied not only to the Java virtual machine and the dump file of the Java virtual machine but also to a memory dump generated by a program written in a general programming language.
  • Java virtual machine is a type of virtual machine that runs programs written in the Java language.
  • a Java virtual machine operating on a computer system equipped with a large amount of memory is often given a large Java heap memory size as a work area on the memory.
  • the Java heap memory (hereinafter abbreviated as Java heap) is a memory area for storing Java objects existing in the process of the Java virtual machine. Since the Java heap size is increasing, the size of the Java heap dump file generated by the Java virtual machine has also increased in recent years.
  • a memory dump is a file where the contents of memory at a certain moment are written out to a file. Therefore, if the memory is rewritten during the generation of the memory dump, the consistency of the memory dump is lost, and the memory failure analysis using the memory dump cannot be performed.
  • the execution of the Java program was stopped while the memory dump was being generated.
  • the stop time generally increases as the Java heap size increases. If there is Java heap memory of several GB to several tens of GB, it may stop for several tens to several hundred seconds.
  • Patent Document 1 proposes a method for shortening the Java virtual machine stop time when generating a memory dump.
  • a process executing a Java virtual machine (hereinafter referred to as a parent process) duplicates its own process to generate a child process.
  • the parent process ends the dump generation process immediately after creating the child process, and returns to the execution of the Java program.
  • Patent Document 1 has a problem. During execution of the memory dump generation process, the parent process and the child process that duplicates the parent process operate simultaneously. As a result, the amount of virtual memory required is approximately doubled. If this required amount of virtual memory exceeds the amount of main memory actually installed in the computer (hereinafter referred to as physical memory), a phenomenon called thrashing occurs and memory access occurs. It takes a lot of time, and the execution speed of the Java program that runs in the parent process slows down.
  • thrashing is an external storage device such as a hard disk drive (hereinafter referred to as “HDD”) that stores memory (pages) of a process when the amount of virtual memory required for the process exceeds the amount of physical memory.
  • HDD hard disk drive
  • this thrashing occurs when the required virtual memory amount is larger than the physical memory amount, and it is expected that the memory access will take a long time, and the Java program being executed in the parent process There is a concern that the execution speed will decrease.
  • garbage collection Garbage Collection, hereinafter referred to as GC
  • GC Garbage Collection
  • the Java program is stopped in order to rewrite the reference of the Java program object safely. Therefore, if thrashing overlaps with GC, the Java program stop time is expected to become very long.
  • parent processing the parent process or parent thread
  • child processing the child process or child thread that performs dumping
  • Java Java program stop time during memory dump can be shortened.
  • the parent process of the Java virtual machine replicates itself and the child process dumps, and the total amount of virtual memory required by both processes exceeds the physical memory amount, the parent process
  • the parent process when the occurrence of GC is expected (hereinafter referred to as when a sign of GC is detected), the child process is terminated even during the memory dump.
  • this method no child process exists when the parent process GC is executed, so the total amount of virtual memory required is reduced, and thrashing is suppressed.
  • FIG. 1 is an example of the configuration of a computer system to which the present invention is applied.
  • the computer 1 includes a CPU 2 and a main storage device 3, an external storage device 5 such as a hard disk drive, a display device such as a liquid crystal display, an input device such as a keyboard and a mouse, and a drive device that reads a storage medium such as a DVD.
  • I / O devices 8 such as are connected.
  • the main storage device 3 stores a Java virtual machine 10, a Java virtual machine 10 CP that duplicates the Java virtual machine 10, and a Java program 9 that operates on the Java virtual machine 10.
  • the Java virtual machine 10 includes a Java heap 4, a program execution unit 11, and a dump processing unit 7.
  • the Java virtual machine 10CP has a Java heap 4CP and a dump processing unit 7CP.
  • the Java heap 4CP is a copy of the Java heap 4, and the dump processing unit 7CP is a copy of the dump processing unit 7. Since the Java virtual machine 10CP is a duplicate of the Java virtual machine 10, it naturally has a processing unit that duplicates the program execution unit 11, but is not depicted in FIG. 1 because it is irrelevant to the description of the present invention.
  • the program execution unit 11 executes the Java program 9 while using the Java heap 4 as a work area.
  • the Java virtual machine 10 stops the execution of the Java program 9 performed by the program execution unit 11 according to an instruction given from the outside of the Java virtual machine 10 (for example, an interrupt instructing generation of a memory dump by the jmap command). Then, the execution of the dump processing unit 7 is started.
  • the dump processing unit 7 and the dump processing unit 7CP include a child processing generation unit 7B, a parent processing return unit 7C, and a child processing dump generation unit 7A.
  • the child process dump generation unit 7A in the dump processing unit 7 and the child process generation unit 7B and the parent process return unit 7C in the dump processing unit 7CP which are not necessary for the description of the invention, are not illustrated in FIG.
  • a Linux (registered trademark) or Unix (registered trademark) OS uses a fork system call or the like, and a Java virtual machine 10 that is a parent process (a parent process when using the fork system call) Is copied to generate a child process (child process when using the fork system call).
  • a fork system call creates a child process that duplicates the process (parent process) that invoked the fork system call.
  • parent process the process that invoked the fork system call.
  • the duplicate of the activated thread becomes the current thread of the child process, and there is no thread other than the current thread in the child process. Therefore, if you want to include information related to the multithread of the parent process in the memory dump, the parent process only dumps the information related to the multithread before invoking the fork system call in the parent process, and then invokes the fork system call.
  • the child process only the information accessible to the current thread needs to be memory dumped.
  • the parent process ends the dump processing unit 7 and returns to the execution of the Java application 9 by the program execution unit 11.
  • the generated child process executes the child processing dump generation unit 7A.
  • the external storage device 5 stores a dump file 6 generated by the child processing dump generation unit 7A using the Java heap 4CP.
  • FIG. 2 is an example of a flowchart of the child process dump generation unit 7A. Here, an example of terminating memory dump generation when there is a sign of GC will be described.
  • the memory dump does not perform all dumps of the memory to be dumped (for example, Java heap 4) continuously, but dumps a part of memory, checks for signs of GC, and dumps the next part of memory. Check the signs of GC and repeat the process.
  • a part of the memory can be a memory area of a predetermined size, a single or a plurality of memory areas containing a specific type of data, or a combination of the above definitions. However, it is not limited to these definitions.
  • the memory area other than the memory area that has already been dumped is called undumped data.
  • This memory dump generation method can be applied to the Java heap, and can also be applied to memory areas other than the Java heap.
  • process 7A1 it is confirmed whether there is undumped data (process 7A1), and if not, the child process dump generation unit 7A is terminated. If undumped data exists, it is confirmed whether there is a sign that GC is started in the parent process (process 7A3).
  • the sign can be confirmed by the following method.
  • the parent process executes the GC
  • a specific GC execution function is started. At the beginning of this GC execution function, perform inter-process communication processing that conveys information that notifies that GC occurs from the parent process to the child process, and the child process receives inter-process communication from the parent process in processing 7A3. If the received content is information notifying that a GC will occur, it can be determined that there is a sign that the GC will start.
  • Another method is to check the Java heap usage of the parent process at an appropriate frequency, and if the Java heap usage exceeds a certain percentage of the Java heap amount given as an option when the Java virtual machine starts, Information indicating that a GC has occurred can be transmitted from the parent process to the child process through inter-process communication. Two methods have been described here, but the present invention is not limited to these methods.
  • the target GC for detecting the sign may be all GCs, or may be limited to the GC that collects all unnecessary objects in the Java heap called Full IV GC. Further, the target may be limited to only other types of GC, or the target may be limited to any combination thereof.
  • the child process end process 7A5 is executed. If the child process is generated by the fork system call, the child process end process 7A5 may end the child process using the _exit system call. At the end of the child process end process 7A5, the child process dump generation unit 7A ends. If not confirmed, dump generation processing 7A2 is executed. The dump generation process 7A2 dumps a part of the memory as described above. When the execution of the dump generation process 7A2 is completed, the process returns to the process 7A1.
  • the child process when there is a sign that the parent process starts GC, the child process is terminated without waiting for the completion of the memory dump, so that the obtained memory dump may remain as a dump of a part of the memory. There is. In that case, the memory dump may be obtained again using the jmap command or the like.
  • the parent process when a child process that duplicates the parent process of the Java virtual machine performs a dump, and when the total amount of virtual memory required by both processes exceeds the physical memory amount, and the parent process gives an indication of GC If detected, thrashing occurs by temporarily suspending memory dump generation in the child process, thereby eliminating memory access from the child process and preventing the child process from paging out the physical memory of the parent process. It is a method to reduce the.
  • the minimum memory required by the child process remains in the physical memory. Therefore, the effect of suppressing thrashing is relatively small compared to the method of the first embodiment.
  • a complete memory dump is acquired with a single memory dump generation instruction (for example, an interrupt that instructs the memory dump generation by the jmap command). be able to.
  • FIG. 3 is another example of a flowchart of the child process dump generation unit 7A.
  • FIG. 3 illustrates a case where memory dump generation is temporarily stopped when there is a sign of GC, and memory dump generation is resumed after the GC ends.
  • process 7A1 check whether there is undumped data (process 7A1), and if not, end the child process dump generation unit 7A. If undumped data exists, it is confirmed whether there is a sign that GC is started in the parent process (process 7A3).
  • process 7A3 if it is not confirmed in process 7A3 that there is a sign that the parent process will start GC, the process proceeds to dump generation process 7A2. If it is confirmed that there is a sign that the parent process will start GC, the process proceeds to process 7A4.
  • process 7A4 check whether GC is finished in the parent process. If it is not confirmed that the process has been completed, the process 7A4 is executed again. Process 7A4 corresponds to the child process temporarily suspending execution of the dump generation process. If the parent process can confirm that the GC has ended, the dump generation processing 7A2 is executed next. Confirmation that GC is terminated in the parent process can be performed by the following method.
  • the GC execution function started at the start of GC execution will be terminated.
  • an inter-process communication process is performed to transmit information notifying that the GC is terminated from the parent process to the child process. If the inter-process communication from is received and the received content is information notifying that the GC is finished, it can be confirmed that the GC is finished.
  • the third embodiment does not create a duplicate of the Java virtual machine, but generates a child process (child thread) as described above.
  • the Java virtual machine 10 stops the execution of the Java program 9 performed by the program execution unit 11 and executes the child process generation unit 7B.
  • the Java virtual machine 10 changes the attribute of all pages included in the dump target memory (for example, the Java heap 4) from read / write (READWRITE) to read-only (READONLY).
  • the Java virtual machine 10 generates a child thread and causes the child processing dump generation unit 7A to execute. After starting the execution of the child process dump generation unit 7A, the Java virtual machine 10 returns to the execution of the Java program 9.
  • the Java virtual machine 10 If the Java virtual machine 10 is executing dumping for the first time and the Java program 9 is being executed, the first write to the dump target memory will occur (the main subject is the Java program 9). Therefore, an illegal memory reference exception occurs, and execution proceeds to the exception handler processing unit 11D.
  • the exception handler processing unit 11D that processes this exception copies the dump target memory page including the address where the illegal memory reference exception has occurred, and returns the attribute of the original non-copied page to read / write (READWRITE). Resume execution where the exception occurred.
  • the child process dump generation unit 7A When dumping the memory to be dumped, the child process dump generation unit 7A, if the page to be dumped is the page copied by the exception handler 11D, the copied page is the page that has not been copied otherwise. Dump It is assumed that exclusive processing is appropriately performed in the exception handler processing unit 11D and the child process dump generation unit 7A. Details of the exclusion process will be described later.
  • the third embodiment can be implemented using threads such as pthreads not only in Windows that does not have fork system calls, but also in Linux and Unix-based OSs that have fork system calls.
  • FIG. 5 is an example of a flowchart of the program execution unit 11.
  • step 11A it is determined in step 11A whether the Java program 9 has ended. If it has ended, the program execution unit is ended, and if not, the instruction execution unit 11B is executed.
  • the instruction execution unit 11B executes instructions constituting the Java program 9 one by one.
  • An exception may occur in the execution of the instruction execution unit 11B.
  • an illegal memory reference exception that is an access to an illegal memory address (STATUS_ACCESS_VIOLATION exception on Windows, SIGSEGV signal on Linux and Unix OS).
  • Process 11C determines whether an exception has occurred. If no exception has occurred, the process returns to the processing 11A and the program execution is continued. If an exception has occurred, the exception handler processing unit 11D is executed. The exception handler processing unit 11D will be described later. After the exception handler 11D is executed, the process 11E is executed.
  • Processing 11E determines whether to re-execute the instruction that caused the exception handled by the exception handler. If it is re-executed, the process 11A is executed, and if it is not re-executed, the program execution unit is terminated.
  • FIG. 6 is an example of a flowchart of processing of the exception handler processing unit 11D.
  • the copy page table is a table in which the copy page secured in the process 11D2 is registered.
  • the copy page table can be implemented as a hash table, for example, but may have other data structures.
  • the copy page secured in process 11D2 is registered in the copy page table in process 11D5.
  • the original page contents are copied to the copy page secured in process 11D6.
  • the exclusion process is terminated in process 11D8. If not registered in the copy page table, the copy page secured in process 11D2 is released in process 11D7, and then the exclusive process is terminated in process 11D8.
  • step 11D9 the attribute of the original page is changed to read / write (READWRITE).
  • READWRITE read / write
  • illegal memory reference due to writing to this page will not occur in the future (Note that illegal memory reference due to a general bug such as Java program 9 may occur, but this is a topic outside the scope of the present invention. is there).
  • re-execution preparation processing is performed in processing 11D10.
  • This is a process for re-executing the Java program 9 from the instruction that caused the illegal memory reference exception.
  • the exception handler function corresponds to the process of returning the macro EXCEPTION_CONTINUE_EXECUTION.
  • change the attributes related to signal processing using the sigaction system call by setting the SA_RESTART option in the sa_flags option flag of the sigaction structure), and then start Java program 9 from the instruction that caused the exception. Can be re-executed.
  • FIG. 7 is another example of the flowchart of the child process generation unit 7B.
  • process 7B1 all dump target memory attributes are changed to read-only. This can be done using the mprotect system call for Linux and Unix-based OSs, and the VirtualProtect function for Windows.
  • process 7B2 a thread for executing the child process dump generation unit 7A is activated. After the execution of this thread starts, the child process generation unit 7B ends.
  • FIG. 8 is another example of the flowchart of the child process dump generation unit 7A.
  • process 7A1 it is confirmed whether there is undumped data (process 7A1), and if there is not, the child process dump generation unit 7A is terminated. If there is undumped data, the copy page search unit 7A6 is executed for the page containing the undumped data. Pages including undumped data may be extracted in the order registered in some data structure, for example, the copy page table defined in this embodiment, or the copied pages may be extracted preferentially.
  • the number of copy pages registered in the copy page table can be reduced as much as possible by combining with process 7A11 (process for deleting copy pages that have been dumped) described later.
  • process 7A11 process for deleting copy pages that have been dumped
  • the copy page search unit 7A6 checks whether the copy page has been registered in the copy page table, and then executes process 7A6A. If the result of the copy page search unit 7A6 is 'Yes', the process 7A6A goes to branch Yes, and in process 7A7, the copy page is searched from the copy page table, the copy page is dumped, and then the process 7A11 is executed. If the result of the copy page search unit 7A6 is 'No', the process 7A6A goes to the branch No, and the original page is dumped in the process 7A8. When the process 7A8 is completed, the copy page search unit 7A13 is executed again to check whether the copy page has been registered in the copy page table, and then the process 7A13A is executed.
  • the entity of the copy page search unit 7A13 is the same as the entity of the copy page search unit 7A6, but the numbers are separated for convenience of explanation.
  • the copy page search unit 7A13 detects the case where the first write from the Java program 9 to the original page occurred and the page contents were rewritten while dumping the original page (without exclusive processing) in process 7A8. To confirm. If the copy page search unit 7A13 finds that the copy page has been registered, it means that the original page was written during the dump of the original page, so the process 7A13A goes to branch Yes .
  • process 7A9 the file pointer of the dump file is rewound by one page in process 7A9, the copy page is dumped in process 7A10, and process 7A11 is executed. If the result of the copy page search unit 7A13 is “No”, the process 7A13A goes to branch No and executes the process 7A11. In process 7A11, the copy page for which dumping is completed is deleted. To delete a copy page, start exclusive processing first, then use the munmap system call if it is a copy page secured using the mmap system call on Linux or Unix OS, and use the VirtualAlloc function on Windows. If it is a secured copy page, delete it using the VirtualFree function, and finally end the exclusion process.
  • process 7A12 it is confirmed whether there is any sign that GC will start.
  • the method for confirming the sign has been described in the description of the first embodiment. If it is confirmed that there is a sign, the child process dump generation unit 7A is terminated, and if not, the process 7A1 is executed.
  • the amount of virtual memory that the Java virtual machine 10 is using to execute the Java program 9 and the amount of copy pages that are currently held in the copy page table are not the sign of GC. It is also possible to implement a method of determining whether or not the value exceeds a predetermined fixed percentage of the physical memory amount, and if so, proceed to branch Yes, otherwise proceed to branch No. Moreover, it can also be set as determination conditions combining these methods.
  • FIG. 9 is an example of a flowchart of the copy page search units 7A6 and 7A13.
  • process 7A6A it is checked whether a copy page is registered in the copy page table. If registered, the process proceeds to process 7A6B, and if not, process 7A6C is executed. In process 7A6B, “Yes” is set in the return value of the copy page search unit, and process 11D8 is executed. In process 7A6C, “No” is set in the return value of the copy page search unit, and process 11D8 is executed. In the process 11D8, the exclusive process is terminated.
  • the same exclusive program can be used for the entire program
  • the copy page table is a hash table
  • each entry in the hash table is an exclusive object.
  • a method for shortening the time required for the exclusive process can be used, but the method of selecting the exclusive object is not limited thereto.
  • FIG. 10 is another example of the flowchart of the dump processing unit 7.
  • FIG. 10 illustrates a case where a memory dump generation method is selected before executing a memory dump.
  • the dump processing unit 7 executes the dump method determination unit 7D.
  • the dump method determination unit 7D uses either the method of the present invention for dumping according to the conventional method, that is, the method of stopping the Java program for generating the memory dump (corresponding to the processing 7E) or the method of the present invention. Determine whether to choose.
  • Judgment method can be fixedly determined by using options given when starting the Java virtual machine or environment variables. If you decide during execution, you can do it as follows.
  • the amount of free physical memory EM is the amount of physical memory mounted TM, the amount of Java heap 4 currently used by the program execution unit 11 JH, and the amount of memory CH used by the Java virtual machine 10 other than Java heap 4 CH And using the memory amount OM used by programs (OS etc.) other than the Java virtual machine 10 running on the computer 1,
  • EM TM-JH-CH-OM It can be calculated by the formula
  • the amount of memory DM required for the memory dump process is a duplicate of the parent process.
  • DM JH + CH It is.
  • Equation 4 shows that twice the amount of memory required by the Java virtual machine 10 (JH + CH) is obtained by subtracting the amount of memory used by programs other than the Java virtual machine 10 from the amount of physical memory installed (TM-OM) Is smaller than that, it means that it can be determined that there is sufficient free physical memory.
  • JH, CH, TM, and OM are calculated by the dump method determination unit 7D, and if (Equation 4) is known, the process proceeds to the child process generation unit 7B. Otherwise, the dump method 7E in the conventional method is used. move on.
  • Equation 4 becomes (Equation 5) 2 ⁇ JH ⁇ TM It becomes. From (Equation 5), if CH is sufficiently smaller than JH and OM is sufficiently smaller than TM, if physical memory more than twice the amount of Java heap 4 used by program execution unit 11 is installed, It can be said that there is enough free physical memory. In this case, the dump method determining unit 7D calculates JH and TM, and if it is known that (Equation 5) is satisfied, the process proceeds to the child process generation unit 7B, and otherwise, the process proceeds to the dump 7E in the conventional method.
  • the parent process After execution of the child process generation unit 7B, the parent process next executes the parent process return unit 7C, the child process generated by the child process generation unit 7B executes the child process dump generation unit 7A, and the dump process unit Exit 7
  • software or the like that realizes each functional unit described above can be recorded on a magnetic or optical portable recording medium, or can be installed in a computer using them. Further, it can be installed on a computer by downloading via a network such as the Internet.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

In the case where a child process obtained by replicating a parent process of a Java virtual machine generates dump information, an approximately double virtual memory amount is required as compared to when the parent process is operated alone, and the approximately double virtual memory amount is necessary. If the necessary virtual memory amount exceeds a physical memory amount actually provided to a computer, a phenomenon called thrashing occurs, with the result that it takes a lot of time to access the memory, and Java program execution speed becomes lower. In the case where a child process obtained by replicating a parent process of a Java virtual machine performs dump, the sum of the virtual memory amounts of both the processes exceeds a physical memory amount, and the generation of garbage collection may occur in the parent process, a memory dump generation in the child process is terminated or temporarily stopped. When the memory dump generation is temporarily stopped, after the garbage collection in the parent process is terminated, the memory dump in the child process is restarted.

Description

ダンプファイル生成方法及び装置Dump file generation method and apparatus
 本発明は、コンピュータプログラムが出力するダンプファイルの生成方法に関する。 The present invention relates to a method for generating a dump file output by a computer program.
 計算機システム上で動作するコンピュータプログラム(以下、プログラムと略記)に、メモリリーク等のメモリ障害が発生したと疑われる場合、プログラムが使用しているメモリのメモリダンプを採取し、それを調べて原因を解明することが一般的である。ここでメモリダンプとは、ある瞬間のメモリの内容をファイル(ダンプファイル)に書き出したものを意味し、この書き出し処理をダンプと呼ぶ。 If you suspect that a memory failure such as a memory leak has occurred in a computer program (hereinafter abbreviated as "program") that runs on a computer system, collect a memory dump of the memory used by the program, and investigate the cause. It is common to elucidate. Here, the memory dump means that the contents of the memory at a certain moment are written in a file (dump file), and this writing process is called a dump.
 また近年の計算機システム、特にサーバやパーソナルコンピュータは、大容量のメモリを備えていることが多い。例えば、1ギガバイト(GB)を超えるメモリを持つサーバやパーソナルコンピュータはもはや珍しくない。このように大容量のメモリを備えた計算機システムでは、メモリダンプのサイズも大きくなる。一般にメモリダンプのサイズはメモリサイズと同程度の大きさになるので、近年のメモリダンプのサイズは1GBを超えることが珍しくない。 In recent years, computer systems, particularly servers and personal computers, often have large-capacity memories. For example, servers and personal computers with more than 1 gigabyte (GB) of memory are no longer unusual. In such a computer system having a large capacity memory, the size of the memory dump also increases. In general, the memory dump size is almost the same as the memory size, so it is not uncommon for recent memory dump sizes to exceed 1 GB.
 メモリダンプが大きくなれば、メモリダンプ生成時間も長くなる。メモリダンプ生成時間が短いほどサービス停止時間は短くなるので、メモリダンプ生成時間の短縮が強く望まれている。特に大容量のメモリを備えるエンタープライズ系計算機システムでその要望は顕著である。以下では、オンライン金融処理といった社会の根幹を支えるエンタープライズ系計算機システムで広く使われているJava(登録商標)言語で記述されたプログラムを動作させるJava仮想マシンが出力するメモリダンプを例に挙げて説明するが、Java仮想マシンやJava仮想マシンのダンプファイルに限らず、一般のプログラミング言語で記述されたプログラムが生成するメモリダンプにも本発明は適用できる。 If the memory dump becomes larger, the memory dump generation time will also be longer. The shorter the memory dump generation time, the shorter the service stop time. Therefore, it is strongly desired to shorten the memory dump generation time. The demand is particularly remarkable in an enterprise computer system having a large capacity memory. The following is an example of a memory dump output by a Java virtual machine that runs a program written in the Java (registered trademark) language widely used in enterprise computer systems that support the foundation of society such as online financial processing. However, the present invention can be applied not only to the Java virtual machine and the dump file of the Java virtual machine but also to a memory dump generated by a program written in a general programming language.
 Java仮想マシンとは、Java言語で記述されたプログラムを動作させる、仮想マシンの一種である。大容量のメモリを搭載した計算機システム上で動作するJava仮想マシンには、メモリ上の作業領域として大きなJavaヒープメモリサイズを与えられることが多い。ここでJavaヒープメモリ(以下、Javaヒープと略記)とは、Java仮想マシンのプロセス内に存在する、Javaのオブジェクトを格納するためのメモリ領域である。Javaヒープサイズが大きくなってきているため、Java仮想マシンが生成するJavaヒープのダンプファイルのサイズも近年大規模化している。 A Java virtual machine is a type of virtual machine that runs programs written in the Java language. A Java virtual machine operating on a computer system equipped with a large amount of memory is often given a large Java heap memory size as a work area on the memory. Here, the Java heap memory (hereinafter abbreviated as Java heap) is a memory area for storing Java objects existing in the process of the Java virtual machine. Since the Java heap size is increasing, the size of the Java heap dump file generated by the Java virtual machine has also increased in recent years.
 前述したように、メモリダンプとは、ある瞬間のメモリの内容をファイルに書き出したものである。そのため、メモリダンプ生成中にメモリが書き換えられると、メモリダンプの一貫性が失われ、メモリダンプを使用したメモリ障害解析ができなくなってしまう。 As described above, a memory dump is a file where the contents of memory at a certain moment are written out to a file. Therefore, if the memory is rewritten during the generation of the memory dump, the consistency of the memory dump is lost, and the memory failure analysis using the memory dump cannot be performed.
 それを防ぐために、従来技術では、メモリダンプ生成中はJavaプログラムの実行を停止させていた。停止時間は一般にJavaヒープサイズが大きいほど長くなる。数GB~数十GBのJavaヒープメモリがあれば、数十~数百秒以上停止してしまう場合も存在する。 In order to prevent this, in the prior art, the execution of the Java program was stopped while the memory dump was being generated. The stop time generally increases as the Java heap size increases. If there is Java heap memory of several GB to several tens of GB, it may stop for several tens to several hundred seconds.
 この問題を解決するために、特許文献1ではメモリダンプ生成時のJava仮想マシン停止時間を短くする方法を提案している。この方法では、Java仮想マシンを実行するプロセス(以下、親プロセス)が自プロセスを複製して子プロセスを生成する。親プロセスは、子プロセス作成直後にダンプ生成処理を終了し、Javaプログラムの実行に戻る。 In order to solve this problem, Patent Document 1 proposes a method for shortening the Java virtual machine stop time when generating a memory dump. In this method, a process executing a Java virtual machine (hereinafter referred to as a parent process) duplicates its own process to generate a child process. The parent process ends the dump generation process immediately after creating the child process, and returns to the execution of the Java program.
 生成された子プロセスは、親プロセスのメモリと同じ内容のメモリを持つように作成されているので、この子プロセスのメモリを使ってメモリダンプ生成処理を実行する。親プロセスと子プロセスのメモリ空間は分離されているので、親プロセスでのJavaプログラム実行によるメモリ書き換えが、子プロセスのメモリ内容を書き換えることはない。現在のオペレーティングシステム(以下、OS)では、子プロセス作成処理の実行時間はメモリダンプ生成処理の実行時間よりも短いことが一般的であり、この方法によって親プロセスの短い停止時間でメモリダンプを生成することができる。 ∙ Since the created child process is created so as to have the same contents as the memory of the parent process, memory dump generation processing is executed using the memory of this child process. Since the memory space of the parent process and the child process is separated, memory rewriting by executing the Java program in the parent process does not rewrite the memory contents of the child process. In the current operating system (hereinafter referred to as OS), the execution time of child process creation processing is generally shorter than the execution time of memory dump generation processing. This method generates a memory dump with a short stop time of the parent process. can do.
US2014/0129880, “GENERATION OF MEMORY DUMP OF A COMPUTER PROCESS WITHOUT TERMINATING THE COMPUTER PROCESS”US2014 / 0129880, “GENERATION OF MEMORY DUMP OF A COMPUTER PROCESS WITHOUT TERMINATING THE COMPUTER PROCESS”
 しかし、特許文献1の方法には問題点がある。メモリダンプ生成処理実行中は、親プロセスと、親プロセスを複製した子プロセスが同時に動作する。そのため、必要な仮想メモリ量は約2倍になる。もしこの必要な仮想メモリ量がそのコンピュータに実際に搭載されている主記憶のメモリ量(以下、物理メモリ量)を上回った場合には、thrashing(スラッシング)と呼ばれる現象が発生し、メモリアクセスに多大な時間がかかり、親プロセスで動作するJavaプログラムの実行速度が低速化してしまう。 However, the method of Patent Document 1 has a problem. During execution of the memory dump generation process, the parent process and the child process that duplicates the parent process operate simultaneously. As a result, the amount of virtual memory required is approximately doubled. If this required amount of virtual memory exceeds the amount of main memory actually installed in the computer (hereinafter referred to as physical memory), a phenomenon called thrashing occurs and memory access occurs. It takes a lot of time, and the execution speed of the Java program that runs in the parent process slows down.
 thrashingとは、非特許文献1にあるように、プロセスに必要な仮想メモリ量が物理メモリ量を上回った場合に、プロセスの持つメモリ(ページ)をハードディスクドライブ(以下、HDD)などの外部記憶装置に退避させて(ページアウト)物理メモリの空きを増やそうとする動作が、高頻度に発生することである。 As described in Non-Patent Document 1, thrashing is an external storage device such as a hard disk drive (hereinafter referred to as “HDD”) that stores memory (pages) of a process when the amount of virtual memory required for the process exceeds the amount of physical memory. The operation of trying to increase the free space of the physical memory by evacuating to (page out) occurs frequently.
 必要な仮想メモリ量が物理メモリ量より多い場合、全ての物理メモリのページはいずれかのプロセスに割り当てられている。ここであるプロセスが、物理メモリに割り当てられていないページにアクセス(読み込みまたは書き換え)しようとした場合、別のプロセスが持つページをページアウトさせ、空いた物理メモリに、アクセスしたいページを割り当てる(ページイン)。そのため、1回のメモリアクセスに対してメモリと外部記憶装置の間のデータ転送が発生し、メモリアクセスに多大な時間がかかってしまう。 If the required amount of virtual memory is greater than the amount of physical memory, all physical memory pages are allocated to any process. If a process here tries to access (read or rewrite) a page that is not allocated to physical memory, the page of another process is paged out, and the page that you want to access is allocated to free physical memory (page In). Therefore, data transfer between the memory and the external storage device occurs for one memory access, and the memory access takes a long time.
 特許文献1の方法では、必要な仮想メモリ量が物理メモリ量より多くなる場合に、このthrashingが発生し、メモリアクセスに多大な時間がかかることが予想され、親プロセスで実行されているJavaプログラムの実行速度が低下することが懸念される。特にガベージコレクション(Garbage Collection、以下GC)と呼ばれるJavaヒープメモリ内の不要なオブジェクトを回収するJava仮想マシンの処理は、大量のメモリアクセスを伴うため、thrashingが発生した状態でのGCには非常に長い時間がかかることが予想される。一般にGC実行中は、Javaプログラムのオブジェクトの参照を安全に書き換えるために、Javaプログラムを停止させる。従って、GCにthrashingが重なると、Javaプログラムの停止時間が非常に長くなることが予想される。 In the method of Patent Document 1, this thrashing occurs when the required virtual memory amount is larger than the physical memory amount, and it is expected that the memory access will take a long time, and the Java program being executed in the parent process There is a concern that the execution speed will decrease. In particular, garbage collection (Garbage Collection, hereinafter referred to as GC), which is a Java virtual machine that collects unnecessary objects in Java heap memory, involves a large amount of memory access, so it is very useful for GC when thrashing occurs. Expected to take a long time. In general, during GC execution, the Java program is stopped in order to rewrite the reference of the Java program object safely. Therefore, if thrashing overlaps with GC, the Java program stop time is expected to become very long.
 これは、メモリダンプのための子プロセス生成による親プロセス停止時間は短くなっても、子プロセスでのメモリダンプと並行して動作する親プロセスでのGC時のJavaプログラムの停止時間が非常に長くなることを意味するため、本来の目的である親プロセス停止時間短縮が実現できない。このような長い停止時間は、Full GCと呼ばれる、Javaヒープメモリ内全体に渡って不要なオブジェクトを回収する処理で特に著しいと考えられる。 This is because even if the parent process stop time due to the child process generation for memory dump is shortened, the Java program stop time during GC in the parent process that operates in parallel with the memory dump in the child process is very long Therefore, it is impossible to reduce the parent process stop time, which is the original purpose. Such a long stop time is considered to be particularly remarkable in a process called “Full GC” for collecting unnecessary objects over the entire Java heap memory.
 ここではプロセスを例に挙げて説明したが、スレッドで処理を行う場合でも同様の問題が発生する。以下では、親プロセスまたは親スレッドを親処理、ダンプを行う子プロセスまたは子スレッドを子処理を呼ぶ。 Here, a process has been described as an example, but the same problem occurs even when processing is performed with a thread. Hereinafter, the parent process or parent thread is referred to as parent processing, and the child process or child thread that performs dumping is referred to as child processing.
 Java仮想マシンの親処理が生成した子処理がダンプを行う場合で、かつ両処理が必要とする仮想メモリ合計量が物理メモリ量を上回る場合、かつ親処理でGCの発生が見込まれる場合には、子処理でのメモリダンプ生成を終了または一時中止する。一時中止した場合には、親処理でのGC終了後に子プロセスでのメモリダンプを再開する。 When the child process generated by the parent process of the Java virtual machine dumps, and when the total amount of virtual memory required by both processes exceeds the physical memory, and when the parent process is expected to generate GC , Terminate or temporarily stop memory dump generation in child processing. In the case of temporary suspension, the memory dump in the child process is resumed after the GC in the parent process ends.
 メモリダンプ時のJavaプログラム停止時間を短縮することができる。 Java Java program stop time during memory dump can be shortened.
本発明を適用した計算機システムの構成を示すブロック図の例である。It is an example of a block diagram showing a configuration of a computer system to which the present invention is applied. 実施例における子処理ダンプ生成部7Aのフローチャートの例である。It is an example of the flowchart of the child process dump production | generation part 7A in an Example. 実施例における子処理ダンプ生成部7Aのフローチャートの他の例である。It is another example of the flowchart of the child process dump production | generation part 7A in an Example. 本発明を適用した計算機システムの構成を示すブロック図の別の例である。It is another example of the block diagram which shows the structure of the computer system to which this invention is applied. 実施例におけるダンプ処理部7のフローチャートの別の例である。It is another example of the flowchart of the dump process part 7 in an Example. 実施例における例外ハンドラ処理部11Dのフローチャートの例である。It is an example of the flowchart of the exception handler process part 11D in an Example. 実施例における子処理生成部7Bのフローチャートの例である。It is an example of the flowchart of the child process production | generation part 7B in an Example. 実施例における子処理ダンプ生成部7Aのフローチャートのまた別の例である。It is another example of the flowchart of the child process dump production | generation part 7A in an Example. 実施例におけるコピーページ検索部7A6のフローチャートの例である。It is an example of the flowchart of the copy page search part 7A6 in an Example. 実施例におけるダンプ処理部7のフローチャートの例である。It is an example of the flowchart of the dump process part 7 in an Example.
 以下に、図面を用いて、本発明を実施するための形態について詳細に説明する。 Hereinafter, embodiments for carrying out the present invention will be described in detail with reference to the drawings.
 実施例1は、Java仮想マシンの親処理が自分を複製して生成した子処理がダンプを行う場合で、かつ両処理が必要とする仮想メモリ合計量が物理メモリ量を上回る場合、かつ親処理でGCの発生が見込まれる場合(以下では、GCの予兆を検知した場合、と呼ぶ)には、メモリダンプの途中でも子処理を終了する方法である。本方法により、親処理のGC実行時には子処理が存在しなくなるため、その分必要とする仮想メモリ合計量が減り、thrashingの発生が抑止される。 In the first embodiment, when the parent process of the Java virtual machine replicates itself and the child process dumps, and the total amount of virtual memory required by both processes exceeds the physical memory amount, the parent process In this case, when the occurrence of GC is expected (hereinafter referred to as when a sign of GC is detected), the child process is terminated even during the memory dump. With this method, no child process exists when the parent process GC is executed, so the total amount of virtual memory required is reduced, and thrashing is suppressed.
 図1は、本発明を適用した計算機システムの構成の例である。計算機1は、CPU 2および主記憶装置3を備え、ハードディスクドライブ等の外部記憶装置5と、液晶ディスプレイ等の表示装置と、キーボードやマウス等の入力装置と、DVD等の記憶媒体を読み取る駆動装置等のI/Oデバイス8が接続されている。 FIG. 1 is an example of the configuration of a computer system to which the present invention is applied. The computer 1 includes a CPU 2 and a main storage device 3, an external storage device 5 such as a hard disk drive, a display device such as a liquid crystal display, an input device such as a keyboard and a mouse, and a drive device that reads a storage medium such as a DVD. I / O devices 8 such as are connected.
 主記憶装置3には、Java仮想マシン10、Java仮想マシン10を複製したJava仮想マシン10CP、Java仮想マシン10上で動作するJavaプログラム9が格納されている。 The main storage device 3 stores a Java virtual machine 10, a Java virtual machine 10 CP that duplicates the Java virtual machine 10, and a Java program 9 that operates on the Java virtual machine 10.
 Java仮想マシン10は、Javaヒープ4、プログラム実行部11、およびダンプ処理部7を備える。 The Java virtual machine 10 includes a Java heap 4, a program execution unit 11, and a dump processing unit 7.
 Java仮想マシン10CPは、Javaヒープ4CP、およびダンプ処理部7CPを備える。Javaヒープ4CPはJavaヒープ4を、ダンプ処理部7CPはダンプ処理部7を複製したものである。なおJava仮想マシン10CPはJava仮想マシン10を複製したものなので、当然プログラム実行部11を複製した処理部を持っているが、本発明の説明には無関係なので、図1では描いていない。 The Java virtual machine 10CP has a Java heap 4CP and a dump processing unit 7CP. The Java heap 4CP is a copy of the Java heap 4, and the dump processing unit 7CP is a copy of the dump processing unit 7. Since the Java virtual machine 10CP is a duplicate of the Java virtual machine 10, it naturally has a processing unit that duplicates the program execution unit 11, but is not depicted in FIG. 1 because it is irrelevant to the description of the present invention.
 Java仮想マシン10は、プログラム実行部11が、作業領域としてJavaヒープ4を利用しながらJavaプログラム9を実行する。また、Java仮想マシン10の外部から与えられる指示等(例えば、jmapコマンドによるメモリダンプ生成を指示する割り込み)により、Java仮想マシン10は、プログラム実行部11が行っているJavaプログラム9の実行を停止させて、ダンプ処理部7の実行を開始する。 In the Java virtual machine 10, the program execution unit 11 executes the Java program 9 while using the Java heap 4 as a work area. In addition, the Java virtual machine 10 stops the execution of the Java program 9 performed by the program execution unit 11 according to an instruction given from the outside of the Java virtual machine 10 (for example, an interrupt instructing generation of a memory dump by the jmap command). Then, the execution of the dump processing unit 7 is started.
 ダンプ処理部7およびダンプ処理部7CPは、子処理生成部7B、親処理リターン部7C、子処理ダンプ生成部7Aを共に備える。ただし、発明の説明に不要な、ダンプ処理部7における子処理ダンプ生成部7A、ダンプ処理部7CPにおける子処理生成部7Bおよび親処理リターン部7Cは図1では描いていない。 The dump processing unit 7 and the dump processing unit 7CP include a child processing generation unit 7B, a parent processing return unit 7C, and a child processing dump generation unit 7A. However, the child process dump generation unit 7A in the dump processing unit 7 and the child process generation unit 7B and the parent process return unit 7C in the dump processing unit 7CP, which are not necessary for the description of the invention, are not illustrated in FIG.
 子処理生成部7Bでは、例えばLinux(登録商標)やUnix(登録商標)系OSならばforkシステムコール等を用いて、親処理(forkシステムコールを用いる場合、親プロセス)であるJava仮想マシン10を複製して子処理(forkシステムコールを用いる場合、子プロセス)を生成する。以下、実施例1および実施例2では、親処理=親プロセス、子処理=子プロセスとして説明を進める。 In the child process generation unit 7B, for example, a Linux (registered trademark) or Unix (registered trademark) OS uses a fork system call or the like, and a Java virtual machine 10 that is a parent process (a parent process when using the fork system call) Is copied to generate a child process (child process when using the fork system call). Hereinafter, in the first embodiment and the second embodiment, description will be made assuming that parent processing = parent process and child processing = child process.
 一般にforkシステムコールは、forkシステムコールを起動したプロセス(親プロセス)を複製した子プロセスを生成するが、親プロセスがマルチスレッドで動作していた場合には、forkシステムコールを起動したスレッドしか複製しない。この起動したスレッドの複製が子プロセスのカレントスレッドとなり、子プロセスにはカレントスレッド以外のスレッドは存在しない。従って、メモリダンプに親プロセスのマルチスレッドに関する情報を含ませたい場合には、親プロセスでのforkシステムコールの起動以前にマルチスレッドに関する情報のみ親プロセスがメモリダンプし、その後forkシステムコールを起動して、子プロセスではカレントスレッドがアクセス可能な情報のみをメモリダンプすればよい。 Generally, a fork system call creates a child process that duplicates the process (parent process) that invoked the fork system call. However, if the parent process was operating in multiple threads, only the thread that initiated the fork system call is duplicated. do not do. The duplicate of the activated thread becomes the current thread of the child process, and there is no thread other than the current thread in the child process. Therefore, if you want to include information related to the multithread of the parent process in the memory dump, the parent process only dumps the information related to the multithread before invoking the fork system call in the parent process, and then invokes the fork system call. In the child process, only the information accessible to the current thread needs to be memory dumped.
 親処理リターン部7Cでは、子処理生成部7B終了後、親プロセスはダンプ処理部7を終了して、プログラム実行部11によるJavaアプリケーション9の実行に戻る。 In the parent process return unit 7C, after the child process generation unit 7B ends, the parent process ends the dump processing unit 7 and returns to the execution of the Java application 9 by the program execution unit 11.
 生成された子プロセスは、子処理ダンプ生成部7Aを実行する。外部記憶装置5には、子処理ダンプ生成部7AがJavaヒープ4CPを用いて生成したダンプファイル6が格納される。 The generated child process executes the child processing dump generation unit 7A. The external storage device 5 stores a dump file 6 generated by the child processing dump generation unit 7A using the Java heap 4CP.
 図2は、子処理ダンプ生成部7Aのフローチャートの例である。ここでは、GCの予兆があった場合にメモリダンプ生成を終了する例を説明する。 FIG. 2 is an example of a flowchart of the child process dump generation unit 7A. Here, an example of terminating memory dump generation when there is a sign of GC will be described.
 まず、メモリダンプ生成方法の概略を説明する。ここでは、メモリダンプはダンプ対象メモリ(例えばJavaヒープ4)の全てのダンプを連続して行うのではなく、メモリの一部分をダンプし、GCの予兆を確認し、メモリの次の一部分をダンプし、GCの予兆を確認し、という繰り返し方法で行う。メモリの一部分とは、あらかじめ決められたサイズのメモリ領域とすることもできるし、特定の種類のデータを収めた単一または複数のメモリ領域とすることもできるし、以上の定義の組み合わせとすることもできるが、これらの定義に限定されるものではない。 First, the outline of the memory dump generation method will be described. Here, the memory dump does not perform all dumps of the memory to be dumped (for example, Java heap 4) continuously, but dumps a part of memory, checks for signs of GC, and dumps the next part of memory. Check the signs of GC and repeat the process. A part of the memory can be a memory area of a predetermined size, a single or a plurality of memory areas containing a specific type of data, or a combination of the above definitions. However, it is not limited to these definitions.
 またここで、既にメモリダンプしたメモリ領域以外のメモリ領域を未ダンプデータと呼ぶ。本メモリダンプ生成方法はJavaヒープに適用することができるし、Javaヒープ以外のメモリ領域に適用することもできる。 Also, here, the memory area other than the memory area that has already been dumped is called undumped data. This memory dump generation method can be applied to the Java heap, and can also be applied to memory areas other than the Java heap.
 図2では、最初に、未ダンプデータがあるか確認し(処理7A1)、なければ子処理ダンプ生成部7Aを終了する。もし未ダンプデータが存在するならば、親プロセスでGCが開始される予兆があるか確認する(処理7A3)。予兆の確認は、次の方法で行うことができる。親プロセスがGCを実行する場合には、特定のGC実行関数を起動する。このGC実行関数の先頭で、GCが発生することを通知する情報を親プロセスから子プロセスへ伝達するプロセス間通信処理を行い、子プロセスは処理7A3で親プロセスからのプロセス間通信を受信し、受信内容がGCが発生することを通知する情報であれば、GCが開始される予兆があると判定することができる。 In FIG. 2, first, it is confirmed whether there is undumped data (process 7A1), and if not, the child process dump generation unit 7A is terminated. If undumped data exists, it is confirmed whether there is a sign that GC is started in the parent process (process 7A3). The sign can be confirmed by the following method. When the parent process executes the GC, a specific GC execution function is started. At the beginning of this GC execution function, perform inter-process communication processing that conveys information that notifies that GC occurs from the parent process to the child process, and the child process receives inter-process communication from the parent process in processing 7A3. If the received content is information notifying that a GC will occur, it can be determined that there is a sign that the GC will start.
 また別の方法では、親プロセスのJavaヒープ使用量を適当な頻度で調べ、Javaヒープ使用量が、Java仮想マシン起動時にオプションで与えられたJavaヒープ量の一定割合を超えたならば、それをGC発生の予兆とみなし、GCが発生することを通知する情報を親プロセスから子プロセスへプロセス間通信で伝達することができる。ここでは2通りの方法を挙げたが、これらの方法に限定されるものではない。 Another method is to check the Java heap usage of the parent process at an appropriate frequency, and if the Java heap usage exceeds a certain percentage of the Java heap amount given as an option when the Java virtual machine starts, Information indicating that a GC has occurred can be transmitted from the parent process to the child process through inter-process communication. Two methods have been described here, but the present invention is not limited to these methods.
 また、予兆を検出する対象のGCは、全てのGCを対象としてもよいし、Full GCと呼ばれるJavaヒープ内の全ての不要オブジェクトを回収するGCに限定してもよい。またそれ以外の種類のGCのみに対象を絞ってもよいし、これらの任意の組み合わせに対象を絞ってもよい。 Also, the target GC for detecting the sign may be all GCs, or may be limited to the GC that collects all unnecessary objects in the Java heap called Full IV GC. Further, the target may be limited to only other types of GC, or the target may be limited to any combination thereof.
 次に7A3の処理で親プロセスでGCが開始される予兆があると確認された場合には、子処理終了処理7A5を実行する。子処理終了処理7A5は、子プロセスがforkシステムコールで生成されたのであれば、_exitシステムコールを用いて子プロセスを終了させればよい。子処理終了処理7A5の終了で子処理ダンプ生成部7Aが終了する。確認されない場合には、ダンプ生成処理7A2を実行する。ダンプ生成処理7A2は、前述したようにメモリの一部分のダンプを行う。ダンプ生成処理7A2の実行が終了したら、処理7A1に戻る。 Next, when it is confirmed that there is a sign that GC is started in the parent process in the process of 7A3, the child process end process 7A5 is executed. If the child process is generated by the fork system call, the child process end process 7A5 may end the child process using the _exit system call. At the end of the child process end process 7A5, the child process dump generation unit 7A ends. If not confirmed, dump generation processing 7A2 is executed. The dump generation process 7A2 dumps a part of the memory as described above. When the execution of the dump generation process 7A2 is completed, the process returns to the process 7A1.
 実施例1では、親プロセスでGCが開始される予兆があった場合に、メモリダンプの終了を待たずに子プロセスを終了させるので、取得されるメモリダンプはメモリの一部分のダンプに留まる可能性がある。その場合は、jmapコマンド等を利用して再度メモリダンプの取得を行えばよい。 In the first embodiment, when there is a sign that the parent process starts GC, the child process is terminated without waiting for the completion of the memory dump, so that the obtained memory dump may remain as a dump of a part of the memory. There is. In that case, the memory dump may be obtained again using the jmap command or the like.
 実施例2は、Java仮想マシンの親プロセスを複製した子プロセスがダンプを行う場合で、かつ両プロセスが必要とする仮想メモリ合計量が物理メモリ量を上回る場合、かつ親プロセスでGCの予兆を検知した場合には、子プロセスでのメモリダンプ生成を一時中止することで子プロセスからのメモリアクセスをなくし、子プロセスが親プロセスの持つ物理メモリをページアウトさせないようにすることで、thrashingの発生を減少させる方法である。 In the second embodiment, when a child process that duplicates the parent process of the Java virtual machine performs a dump, and when the total amount of virtual memory required by both processes exceeds the physical memory amount, and the parent process gives an indication of GC If detected, thrashing occurs by temporarily suspending memory dump generation in the child process, thereby eliminating memory access from the child process and preventing the child process from paging out the physical memory of the parent process. It is a method to reduce the.
 実施例2は子プロセスを終了させないため、子プロセスが最低限必要とするメモリは物理メモリ上に残ることから、実施例1の方法に比べてthrashingを抑止する効果は相対的に小さいが、実施例1と異なり、GC終了後に子プロセスによるメモリダンプ生成処理を再開することで、一回のメモリダンプ生成指示(例えば、jmapコマンドによるメモリダンプ生成を指示する割り込み)で完全なメモリダンプを取得することができる。 In the second embodiment, since the child process is not terminated, the minimum memory required by the child process remains in the physical memory. Therefore, the effect of suppressing thrashing is relatively small compared to the method of the first embodiment. Unlike Example 1, by restarting the memory dump generation process by the child process after the GC is completed, a complete memory dump is acquired with a single memory dump generation instruction (for example, an interrupt that instructs the memory dump generation by the jmap command). be able to.
 図3は、子処理ダンプ生成部7Aのフローチャートの他の例である。図3では、GCの予兆があった場合にメモリダンプ生成を一時停止し、GC終了後にメモリダンプ生成を再開する場合を説明する。 FIG. 3 is another example of a flowchart of the child process dump generation unit 7A. FIG. 3 illustrates a case where memory dump generation is temporarily stopped when there is a sign of GC, and memory dump generation is resumed after the GC ends.
 最初に、未ダンプデータがあるか確認し(処理7A1)、なければ子処理ダンプ生成部7Aを終了する。もし未ダンプデータが存在するならば、親プロセスでGCが開始される予兆があるか確認する(処理7A3)。 First, check whether there is undumped data (process 7A1), and if not, end the child process dump generation unit 7A. If undumped data exists, it is confirmed whether there is a sign that GC is started in the parent process (process 7A3).
 次に処理7A3で親プロセスでGCが開始される予兆があると確認されない場合には、ダンプ生成処理7A2に進む。また親プロセスでGCが開始される予兆があると確認された場合には、処理7A4に進む。 Next, if it is not confirmed in process 7A3 that there is a sign that the parent process will start GC, the process proceeds to dump generation process 7A2. If it is confirmed that there is a sign that the parent process will start GC, the process proceeds to process 7A4.
 処理7A4では、親プロセスでGCが終了したか確認する。終了したことが確認できなければ、再度処理7A4を実行する。処理7A4は、子プロセスがダンプ生成処理の実行を一時停止していることに相当する。親プロセスでGCが終了したことを確認できれば、次にダンプ生成処理7A2を実行する。親プロセスでGCが終了することの確認は、次の方法で行うことができる。 In process 7A4, check whether GC is finished in the parent process. If it is not confirmed that the process has been completed, the process 7A4 is executed again. Process 7A4 corresponds to the child process temporarily suspending execution of the dump generation process. If the parent process can confirm that the GC has ended, the dump generation processing 7A2 is executed next. Confirmation that GC is terminated in the parent process can be performed by the following method.
 親プロセスがGCを終了する場合、GC実行開始時に起動したGC実行関数を終了することになる。このGC実行関数を終了させる処理(例えばreturn文)の直前に、GCが終了することを通知する情報を親プロセスから子プロセスへ伝達するプロセス間通信処理を行い、子プロセスは処理7A4で親プロセスからのプロセス間通信を受信し、受信内容がGCが終了することを通知する情報であれば、GCが終了したと確認することができる。ここでは1通りの方法を挙げたが、この方法に限定されるものではない。 When the parent process terminates GC, the GC execution function started at the start of GC execution will be terminated. Immediately before this GC execution function is terminated (for example, a return statement), an inter-process communication process is performed to transmit information notifying that the GC is terminated from the parent process to the child process. If the inter-process communication from is received and the received content is information notifying that the GC is finished, it can be confirmed that the GC is finished. Although one method has been described here, the present invention is not limited to this method.
 ダンプ生成処理7A2の実行が終了したら、処理7A1に戻る。 When the dump generation process 7A2 is finished, return to process 7A1.
 図4~図9では、forkシステムコールを持たないMicrosoft Windows(登録商標)のようなOSの場合に、親スレッドでJava仮想マシン自体がメモリ管理をしながら、親スレッドが生成した子スレッド(ダンプスレッド)がダンプを生成する方法を説明する。実施例3では、親処理=親スレッド、子処理=子スレッド(ダンプスレッド)として説明を進める。親処理=親プロセス、子処理=子プロセスとする場合は、親子プロセス間でメモリを共有する機構(例えば、ファイルマップトメモリ)を導入すれば、アルゴリズム上は同じような動作をさせることが可能である。 4 to 9, in the case of an OS such as Microsoft® Windows (registered trademark) that does not have a fork system call, the child thread (dump) generated by the parent thread while the Java virtual machine itself manages the memory in the parent thread. A method of generating a dump by a thread) will be described. In the third embodiment, the description will be made assuming that parent processing = parent thread and child processing = child thread (dump thread). When parent processing = parent process and child processing = child process, if a mechanism for sharing memory between parent and child processes (for example, file-mapped memory) is introduced, the same operation can be performed on the algorithm. It is.
 最初に本方法の概要を説明する。本方法は、ダンプ生成指示時点のダンプ対象メモリ(ページ)の内容を、子処理向けにコピーして別ページとする。そのため、Javaプログラム9を実行しながら、子処理スレッドはコピーされた別ページをダンプすることで、親子スレッドが同時に動作しながらのダンプ処理を可能とするものである。このとき、ページのコピーは、ダンプ生成指示時点でまとめて行うのではなく、ダンプ対象メモリ(ページ)に最初の書き込みが発生した時点で、オンデマンドにページ単位に行う。この方法によりJavaプログラム9の長時間停止を抑止している。なお、このようなページコピー方法は一般にコピーオンライト(Copy-on-Write)と呼ばれている。更に、ダンプ中にGCの予兆を検知した場合には、子スレッドを終了させ、コピーページを削除することで、thrashingの発生を抑止する。 First, the outline of this method will be explained. In this method, the contents of the dump target memory (page) at the time when the dump generation is instructed are copied to another page for child processing. For this reason, the child processing thread dumps another copied page while executing the Java program 9, thereby enabling dump processing while the parent and child threads operate simultaneously. At this time, the page copy is not performed collectively at the time of dump generation instruction, but is performed on a page basis on demand when the first write occurs in the dump target memory (page). This method prevents the Java program 9 from stopping for a long time. Such a page copy method is generally called copy-on-write. Further, when a GC sign is detected during dumping, the child thread is terminated and the copy page is deleted to prevent thrashing.
 本方法を図4を用いてもう少し詳しく説明する。実施例3では、実施例1、実施例2と異なり、Java仮想マシンの複製は作成しないが、前述のように子処理(子スレッド)を生成する。Java仮想マシン10の外部等から与えられるダンプ生成指示により、Java仮想マシン10はプログラム実行部11が行っているJavaプログラム9の実行を停止し、子処理生成部7Bを実行する。子処理生成部7Bでは、Java仮想マシン10は、ダンプ対象メモリ(例えばJavaヒープ4)に含まれる全ページが持つ属性を読み書き可能(READWRITE)から読み込み専用(READONLY)へ変更する。次にJava仮想マシン10は子スレッドを生成して、子処理ダンプ生成部7Aを実行させる。子処理ダンプ生成部7Aの実行開始後、Java仮想マシン10はJavaプログラム9の実行に戻る。 This method will be described in more detail with reference to FIG. Unlike the first and second embodiments, the third embodiment does not create a duplicate of the Java virtual machine, but generates a child process (child thread) as described above. In response to a dump generation instruction given from the outside of the Java virtual machine 10 or the like, the Java virtual machine 10 stops the execution of the Java program 9 performed by the program execution unit 11 and executes the child process generation unit 7B. In the child process generation unit 7B, the Java virtual machine 10 changes the attribute of all pages included in the dump target memory (for example, the Java heap 4) from read / write (READWRITE) to read-only (READONLY). Next, the Java virtual machine 10 generates a child thread and causes the child processing dump generation unit 7A to execute. After starting the execution of the child process dump generation unit 7A, the Java virtual machine 10 returns to the execution of the Java program 9.
 Java仮想マシン10が、ダンプ実行中かつJavaプログラム9の実行中にダンプ対象メモリへの初めての書き込みが生じた場合(書き込む主体はJavaプログラム9である)、その時点でダンプ対象メモリは読み込み専用となっているので、不正メモリ参照例外が発生し、実行が例外ハンドラ処理部11Dへ移行する。この例外を処理する例外ハンドラ処理部11Dは、不正メモリ参照例外が発生したアドレスを含むダンプ対象メモリのページをコピーして、元のコピーされていないページの属性を読み書き可能(READWRITE)に戻し、例外が発生した場所から実行を再開する。 If the Java virtual machine 10 is executing dumping for the first time and the Java program 9 is being executed, the first write to the dump target memory will occur (the main subject is the Java program 9). Therefore, an illegal memory reference exception occurs, and execution proceeds to the exception handler processing unit 11D. The exception handler processing unit 11D that processes this exception copies the dump target memory page including the address where the illegal memory reference exception has occurred, and returns the attribute of the original non-copied page to read / write (READWRITE). Resume execution where the exception occurred.
 子処理ダンプ生成部7Aは、ダンプ対象メモリをダンプする際に、現在ダンプしたいページが例外ハンドラ11Dによりコピーされたページであればコピーされたページを、そうでなければ元のコピーされていないページをダンプする。例外ハンドラ処理部11Dと子処理ダンプ生成部7Aでは、適切に排他処理が行われているものとする。排他処理の詳細については後述する。 When dumping the memory to be dumped, the child process dump generation unit 7A, if the page to be dumped is the page copied by the exception handler 11D, the copied page is the page that has not been copied otherwise. Dump It is assumed that exclusive processing is appropriately performed in the exception handler processing unit 11D and the child process dump generation unit 7A. Details of the exclusion process will be described later.
 なお、本実施例3は、forkシステムコールを持たないWindowsだけでなく、forkシステムコールを持つLinuxやUnix系OSでも、pthread等のスレッドを用いて実装することができる。 Note that the third embodiment can be implemented using threads such as pthreads not only in Windows that does not have fork system calls, but also in Linux and Unix-based OSs that have fork system calls.
 以下、図5~図9を用いて詳細に説明する。 Hereinafter, this will be described in detail with reference to FIGS.
 図5は、プログラム実行部11のフローチャートの例である。最初に、処理11AでJavaプログラム9が終了しているか判定し、終了していればプログラム実行部を終了し、終了していなければ命令実行部11Bを実行する。命令実行部11Bは、Javaプログラム9を構成する命令を1つずつ実行する。命令実行部11Bの実行では例外が発生する可能性がある。たとえば、不正なメモリアドレスに対するアクセスである不正メモリ参照例外である(WindowsではSTATUS_ACCESS_VIOLATION例外、LinuxやUnix系OSではSIGSEGVシグナルである)。 FIG. 5 is an example of a flowchart of the program execution unit 11. First, it is determined in step 11A whether the Java program 9 has ended. If it has ended, the program execution unit is ended, and if not, the instruction execution unit 11B is executed. The instruction execution unit 11B executes instructions constituting the Java program 9 one by one. An exception may occur in the execution of the instruction execution unit 11B. For example, an illegal memory reference exception that is an access to an illegal memory address (STATUS_ACCESS_VIOLATION exception on Windows, SIGSEGV signal on Linux and Unix OS).
 処理11Cでは、例外が発生したか判定する。もし例外が発生していなければ、処理11Aに戻ってプログラム実行を継続し、例外が発生していれば、例外ハンドラ処理部11Dを実行する。例外ハンドラ処理部11Dについては後述する。例外ハンドラ11D実行後、処理11Eを実行する。 Process 11C determines whether an exception has occurred. If no exception has occurred, the process returns to the processing 11A and the program execution is continued. If an exception has occurred, the exception handler processing unit 11D is executed. The exception handler processing unit 11D will be described later. After the exception handler 11D is executed, the process 11E is executed.
 処理11Eでは、例外ハンドラが処理した例外を起こした命令を再実行するか判定する。再実行するのであれば処理11Aを実行し、再実行しないのであればプログラム実行部を終了する。 Processing 11E determines whether to re-execute the instruction that caused the exception handled by the exception handler. If it is re-executed, the process 11A is executed, and if it is not re-executed, the program execution unit is terminated.
 図6は、例外ハンドラ処理部11Dの処理のフローチャートの例である。最初に、処理11D1でダンプ対象メモリ領域内で発生した不正メモリ参照例外であるかどうか判定する。もしそうでなければ、通常の例外処理(処理11D11)を実行する。もしそうであれば、処理11D2でコピーページ確保、すなわち前述のコピーされた別ページを意味するメモリ領域の確保を行う。これは、LinuxやUnix系OSであればmmapシステムコール、WindowsであればVirtualAlloc関数などを用いて行うことができる。 FIG. 6 is an example of a flowchart of processing of the exception handler processing unit 11D. First, it is determined whether or not the illegal memory reference exception has occurred in the dump target memory area in process 11D1. If not, normal exception processing (processing 11D11) is executed. If so, the process 11D2 secures a copy page, that is, secures a memory area indicating the above-mentioned another copied page. This can be done using the mmap system call for Linux and Unix-based OSs, and the VirtualAlloc function for Windows.
 次に処理11D3で排他処理を開始する。次に処理11D4で、不正メモリ参照例外を起こしたアドレスを含むページが、既にコピーページテーブルに登録されているか調べる。 Next, exclusive processing starts in processing 11D3. Next, in process 11D4, it is checked whether the page including the address that caused the illegal memory reference exception has already been registered in the copy page table.
 コピーページテーブルとは、処理11D2で確保されたコピーページを登録しておくテーブルである。コピーページテーブルは、たとえばハッシュテーブルで実装することができるが、他のデータ構造でも構わない。 The copy page table is a table in which the copy page secured in the process 11D2 is registered. The copy page table can be implemented as a hash table, for example, but may have other data structures.
 もしコピーページテーブルに登録されていなければ、処理11D2で確保されたコピーページを処理11D5でコピーページテーブルに登録する。次に処理11D6で確保したコピーページに元のページ内容をコピーする。次に処理11D8で排他処理を終了する。もしコピーページテーブルに登録されていなければ、処理11D7で、処理11D2で確保したコピーページを解放し、次に処理11D8で排他処理を終了する。 If not registered in the copy page table, the copy page secured in process 11D2 is registered in the copy page table in process 11D5. Next, the original page contents are copied to the copy page secured in process 11D6. Next, the exclusion process is terminated in process 11D8. If not registered in the copy page table, the copy page secured in process 11D2 is released in process 11D7, and then the exclusive process is terminated in process 11D8.
 処理11D4の分岐No時の処理は無駄に見えるかもしれないが、処理11D2でのコピーページ確保を排他処理区間外に出すことで、排他処理にかかる時間を短くし、処理性能を向上させる効果がある。また適切に排他処理や事前・事後処理を行えば、処理11D7のコピーページ解放を排他処理区間外に出すことも可能である。 Processing at the time of branch No in process 11D4 may seem useless, but by securing the copy page in process 11D2 outside the exclusive processing section, the effect of shortening the time required for exclusive processing and improving processing performance is there. If the exclusive process and the pre- and post-processes are appropriately performed, the copy page release of process 11D7 can be made outside the exclusive process section.
 次に、処理11D9で元のページの属性を読み書き可能(READWRITE)に変更する。これは、LinuxやUnix系OSであればmprotectシステムコール、WindowsであればVirtualProtect関数などを用いて行うことができる。処理11D9により、今後このページへの書き込みによる不正メモリ参照は起こらなくなる(なお、Javaプログラム9等の一般的なバグによる不正メモリ参照は起こる可能性はあるが、それは本発明の範囲外の話題である)。 Next, in step 11D9, the attribute of the original page is changed to read / write (READWRITE). This can be done using the mprotect system call for Linux and Unix-based OSs, and the VirtualProtect function for Windows. By processing 11D9, illegal memory reference due to writing to this page will not occur in the future (Note that illegal memory reference due to a general bug such as Java program 9 may occur, but this is a topic outside the scope of the present invention. is there).
 最後に処理11D10で再実行準備処理を行う。これは、不正メモリ参照例外を起こした命令からJavaプログラム9を再実行するための処理である。例えばWindowsで構造化例外処理を用いた場合では、例外ハンドラ関数がマクロEXCEPTION_CONTINUE_EXECUTIONを返す処理に対応する。またLinuxやUnix系OSでは、sigactionシステムコールを用いてシグナルの処理に関する属性を変更する(sigaction構造体のsa_flagsオプションフラグにSA_RESTARTオプションを設定する)ことで、例外を起こした命令からJavaプログラム9を再実行することができる。 Finally, re-execution preparation processing is performed in processing 11D10. This is a process for re-executing the Java program 9 from the instruction that caused the illegal memory reference exception. For example, when structured exception handling is used on Windows, the exception handler function corresponds to the process of returning the macro EXCEPTION_CONTINUE_EXECUTION. On Linux and Unix OS, change the attributes related to signal processing using the sigaction system call (by setting the SA_RESTART option in the sa_flags option flag of the sigaction structure), and then start Java program 9 from the instruction that caused the exception. Can be re-executed.
 図7は子処理生成部7Bのフローチャートの他の例である。最初に処理7B1でダンプ対象メモリの属性を全て読み込み専用(READONLY)に変更する。これは、LinuxやUnix系OSであればmprotectシステムコール、WindowsであればVirtualProtect関数などを用いて行うことができる。次に処理7B2で子処理ダンプ生成部7Aを実行するスレッドを立ち上げる。本スレッド実行開始後、子処理生成部7Bは終了する。 FIG. 7 is another example of the flowchart of the child process generation unit 7B. First, in process 7B1, all dump target memory attributes are changed to read-only. This can be done using the mprotect system call for Linux and Unix-based OSs, and the VirtualProtect function for Windows. Next, in process 7B2, a thread for executing the child process dump generation unit 7A is activated. After the execution of this thread starts, the child process generation unit 7B ends.
 図8は子処理ダンプ生成部7Aのフローチャートの他の例である。最初に、未ダンプデータがあるか確認し(処理7A1)、なければ子処理ダンプ生成部7Aを終了する。もし未ダンプデータが存在するならば、未ダンプデータを含むページに関してコピーページ検索部7A6を実行する。未ダンプデータを含むページは、なんらかのデータ構造、たとえば本実施例で定義したコピーページテーブル、に登録されている順に取り出してもよいし、コピーされたページを優先的に取り出してもよい。 FIG. 8 is another example of the flowchart of the child process dump generation unit 7A. First, it is confirmed whether there is undumped data (process 7A1), and if there is not, the child process dump generation unit 7A is terminated. If there is undumped data, the copy page search unit 7A6 is executed for the page containing the undumped data. Pages including undumped data may be extracted in the order registered in some data structure, for example, the copy page table defined in this embodiment, or the copied pages may be extracted preferentially.
 コピーされたページを優先的に取り出す方法を用いると、後述する処理7A11(ダンプの終了したコピーページを削除する処理)と組み合わせることで、コピーページテーブルに登録されているコピーページ数をできるだけ少なくし、メモリ使用量を少なくすることで物理メモリ枯渇の可能性、すなわちthrashing発生の可能性を小さくすることができる。 By using the method of preferentially retrieving copied pages, the number of copy pages registered in the copy page table can be reduced as much as possible by combining with process 7A11 (process for deleting copy pages that have been dumped) described later. By reducing the amount of memory used, the possibility of physical memory depletion, that is, the possibility of occurrence of thrashing can be reduced.
 次にコピーページ検索部7A6でコピーページがコピーページテーブルに登録済みか調べ、次に処理7A6Aを実行する。コピーページ検索部7A6の結果が’Yes’ならば処理7A6Aは分岐Yesへ行き、処理7A7でコピーページテーブルからコピーページを探して、コピーページをダンプし、次に処理7A11を実行する。コピーページ検索部7A6の結果が’No’ならば処理7A6Aは分岐Noへ行き、処理7A8で元のページをダンプする。処理7A8が終了したら、もう一度コピーページ検索部7A13を実行してコピーページがコピーページテーブルに登録済みか調べ、次に処理7A13Aを実行する。コピーページ検索部7A13の実体はコピーページ検索部7A6の実体と同一のものだが、説明の都合上番号を分けている。 Next, the copy page search unit 7A6 checks whether the copy page has been registered in the copy page table, and then executes process 7A6A. If the result of the copy page search unit 7A6 is 'Yes', the process 7A6A goes to branch Yes, and in process 7A7, the copy page is searched from the copy page table, the copy page is dumped, and then the process 7A11 is executed. If the result of the copy page search unit 7A6 is 'No', the process 7A6A goes to the branch No, and the original page is dumped in the process 7A8. When the process 7A8 is completed, the copy page search unit 7A13 is executed again to check whether the copy page has been registered in the copy page table, and then the process 7A13A is executed. The entity of the copy page search unit 7A13 is the same as the entity of the copy page search unit 7A6, but the numbers are separated for convenience of explanation.
 コピーページ検索部7A13は、処理7A8で元のページを(排他処理なしで)ダンプする間に、Javaプログラム9から元のページへの最初の書き込みが発生してページ内容が書き換えられていた場合を確認するために行う。もしコピーページ検索部7A13でコピーページが登録済みであることがわかったのであれば、元のページのダンプ中に元のページに書き込みが発生したことを意味するので、処理7A13Aは分岐Yesに行く。 The copy page search unit 7A13 detects the case where the first write from the Java program 9 to the original page occurred and the page contents were rewritten while dumping the original page (without exclusive processing) in process 7A8. To confirm. If the copy page search unit 7A13 finds that the copy page has been registered, it means that the original page was written during the dump of the original page, so the process 7A13A goes to branch Yes .
 次に、処理7A9でダンプファイルのファイルポインタを1ページ分巻き戻して、処理7A10でコピーページをダンプし、処理7A11を実行する。もしコピーページ検索部7A13の結果が’No’ならば、処理7A13Aは分岐Noに行き、処理7A11を実行する。処理7A11では、ダンプが終了したコピーページを削除する。コピーページの削除は、最初に排他処理を開始し、次にLinuxやUnix系OSでmmapシステムコールを使用して確保されたコピーページであればmunmapシステムコールを、WindowsでVirtualAlloc関数を使用して確保されたコピーページであればVirtualFree関数を使用して削除し、最後に排他処理を終了する。 Next, the file pointer of the dump file is rewound by one page in process 7A9, the copy page is dumped in process 7A10, and process 7A11 is executed. If the result of the copy page search unit 7A13 is “No”, the process 7A13A goes to branch No and executes the process 7A11. In process 7A11, the copy page for which dumping is completed is deleted. To delete a copy page, start exclusive processing first, then use the munmap system call if it is a copy page secured using the mmap system call on Linux or Unix OS, and use the VirtualAlloc function on Windows. If it is a secured copy page, delete it using the VirtualFree function, and finally end the exclusion process.
 次に処理7A12では、GCが開始される予兆があるか確認する。予兆の確認方法については実施例1の説明で前述した。もし予兆があると確認されれば子処理ダンプ生成部7Aを終了し、そうでなければ処理7A1を実行する。 Next, in process 7A12, it is confirmed whether there is any sign that GC will start. The method for confirming the sign has been described in the description of the first embodiment. If it is confirmed that there is a sign, the child process dump generation unit 7A is terminated, and if not, the process 7A1 is executed.
 なお、処理7A12では、GCの予兆ではなく、Java仮想マシン10がJavaプログラム9の実行のために使用している仮想メモリ量と、現在コピーページテーブルに保持しているコピーページの量を合計した値が、物理メモリ量のあらかじめ定めた一定割合を超えるかどうかを判定し、超えている場合に分岐Yesへ、そうでない場合に分岐Noへ進む方法を実装することもできる。また、これらの方法を組み合わせて判定条件とすることもできる。 Note that in process 7A12, the amount of virtual memory that the Java virtual machine 10 is using to execute the Java program 9 and the amount of copy pages that are currently held in the copy page table are not the sign of GC. It is also possible to implement a method of determining whether or not the value exceeds a predetermined fixed percentage of the physical memory amount, and if so, proceed to branch Yes, otherwise proceed to branch No. Moreover, it can also be set as determination conditions combining these methods.
 図9はコピーページ検索部7A6および7A13のフローチャートの例である。 FIG. 9 is an example of a flowchart of the copy page search units 7A6 and 7A13.
 前述したように7A6と7A13は同じ処理なので、まとめて説明を行う。最初に、処理11D3で排他処理を開始する。次に処理7A6Aで、コピーページテーブルにコピーページが登録されているか調べ、登録されていれば処理7A6Bへ、そうでなければ処理7A6Cを実行する。処理7A6Bではコピーページ検索部の返値に’Yes’を設定し、処理11D8を実行する。処理7A6Cではコピーページ検索部の返値に’No’を設定し、処理11D8を実行する。処理11D8では排他処理を終了する。 As described above, since 7A6 and 7A13 are the same process, they will be explained together. First, exclusive processing is started in processing 11D3. Next, in process 7A6A, it is checked whether a copy page is registered in the copy page table. If registered, the process proceeds to process 7A6B, and if not, process 7A6C is executed. In process 7A6B, “Yes” is set in the return value of the copy page search unit, and process 11D8 is executed. In process 7A6C, “No” is set in the return value of the copy page search unit, and process 11D8 is executed. In the process 11D8, the exclusive process is terminated.
 なお、実施例3の説明で述べた排他処理には、全て同じ、プログラム全体で1つの排他オブジェクトを用いることもできるし、コピーページテーブルをハッシュテーブルとし、ハッシュテーブルの各エントリを排他オブジェクトとすることで排他処理にかかる時間を短縮する方法などを用いることもできるが、排他オブジェクトの選び方はこれらに限らない。 In the exclusive processing described in the description of the third embodiment, the same exclusive program can be used for the entire program, the copy page table is a hash table, and each entry in the hash table is an exclusive object. Thus, a method for shortening the time required for the exclusive process can be used, but the method of selecting the exclusive object is not limited thereto.
 図10は、ダンプ処理部7のフローチャートの別の例である。図10では、メモリダンプを実行する前にメモリダンプ生成方法を選択する場合を説明する。 FIG. 10 is another example of the flowchart of the dump processing unit 7. FIG. 10 illustrates a case where a memory dump generation method is selected before executing a memory dump.
 最初にダンプ処理部7は、ダンプ方法判定部7Dを実行する。ダンプ方法判定部7Dは、従来方法でのダンプ、すなわち背景技術の項で述べたように、メモリダンプ生成のためにJavaプログラムを停止させる方法(処理7Eに対応)と、本発明の方法のどちらを選ぶか判定する。 First, the dump processing unit 7 executes the dump method determination unit 7D. The dump method determination unit 7D uses either the method of the present invention for dumping according to the conventional method, that is, the method of stopping the Java program for generating the memory dump (corresponding to the processing 7E) or the method of the present invention. Determine whether to choose.
 判定方法は、Java仮想マシン起動時に与えるオプション、または環境変数等を用いて、固定的に決めることができる。また実行中に決めるならば、次のように行うことができる。 Judgment method can be fixedly determined by using options given when starting the Java virtual machine or environment variables. If you decide during execution, you can do it as follows.
 まず、空いている物理メモリ量EMは、物理メモリ搭載量TMと、現在プログラム実行部11が使っているJavaヒープ4の量JHと、Java仮想マシン10がJavaヒープ4以外で使用するメモリ量CHと、計算機1で実行されているJava仮想マシン10以外のプログラム(OS等)が使用するメモリ量OMを用いて、
 (式1)  EM=TM-JH-CH-OM
という式で計算できる。一方、メモリダンプ処理が必要とするメモリ量DMは、メモリダンプ処理が親処理を複製したものであることから、
 (式2)  DM=JH+CH
である。したがって、空いている物理メモリ量が十分にあるという条件は、EM>DM、つまり
 (式3)  TM-JH-CH-OM>JH+CH
である。これを変形すると、
 (式4)  2×(JH+CH)<TM-OM
となる。(式4)は、Java仮想マシン10が必要とするメモリ量(JH+CH)の2倍が、物理メモリ搭載量からJava仮想マシン10以外のプログラムが使用するメモリ量を引いたもの(TM-OM)よりも小さければ、空いている物理メモリが十分にあると判定できることを意味する。従って、ダンプ方法判定部7DでJH、CH、TM、OMを計算し、(式4)が成立することが分かれば、子処理生成部7Bに進み、そうでなければ従来方法でのダンプ7Eに進む。
First, the amount of free physical memory EM is the amount of physical memory mounted TM, the amount of Java heap 4 currently used by the program execution unit 11 JH, and the amount of memory CH used by the Java virtual machine 10 other than Java heap 4 CH And using the memory amount OM used by programs (OS etc.) other than the Java virtual machine 10 running on the computer 1,
(Formula 1) EM = TM-JH-CH-OM
It can be calculated by the formula On the other hand, the amount of memory DM required for the memory dump process is a duplicate of the parent process.
(Formula 2) DM = JH + CH
It is. Therefore, the condition that there is a sufficient amount of free physical memory is EM> DM, that is, (Equation 3) TM-JH-CH-OM> JH + CH
It is. If this is transformed,
(Formula 4) 2 × (JH + CH) <TM-OM
It becomes. (Equation 4) shows that twice the amount of memory required by the Java virtual machine 10 (JH + CH) is obtained by subtracting the amount of memory used by programs other than the Java virtual machine 10 from the amount of physical memory installed (TM-OM) Is smaller than that, it means that it can be determined that there is sufficient free physical memory. Therefore, JH, CH, TM, and OM are calculated by the dump method determination unit 7D, and if (Equation 4) is known, the process proceeds to the child process generation unit 7B. Otherwise, the dump method 7E in the conventional method is used. move on.
 また、CHはJHより十分小さく、OMはTMより十分小さいと仮定することができれば、(式4)は
 (式5)  2×JH<TM
となる。(式5)より、CHはJHより十分小さく、OMはTMより十分小さいのであれば、プログラム実行部11が使っているJavaヒープ4の量の2倍以上の物理メモリを搭載していれば、空いている物理メモリが十分にあるといえる。この場合は、ダンプ方法判定部7DでJH、TMを計算し、(式5)が成立することが分かれば、子処理生成部7Bに進み、そうでなければ従来方法でのダンプ7Eに進む。
If it can be assumed that CH is sufficiently smaller than JH and OM is sufficiently smaller than TM, (Equation 4) becomes (Equation 5) 2 × JH <TM
It becomes. From (Equation 5), if CH is sufficiently smaller than JH and OM is sufficiently smaller than TM, if physical memory more than twice the amount of Java heap 4 used by program execution unit 11 is installed, It can be said that there is enough free physical memory. In this case, the dump method determining unit 7D calculates JH and TM, and if it is known that (Equation 5) is satisfied, the process proceeds to the child process generation unit 7B, and otherwise, the process proceeds to the dump 7E in the conventional method.
 また、Java仮想マシン10の起動時にオプションで与えるJavaヒープの最大量Xmxの間にある関係式
 (式6)  JH<Xmx
を用いて、(式5)の代わりに
 (式7)  2×Xmx<TM
を利用することもできる。この場合は、ダンプ方法判定部7DでTMを計算し、それをXmxの2倍の値と比べて(式7)が成立することが分かれば、子プロセス生成部7Bに進み、そうでなければ従来方法でのダンプ7Eに進む。
Also, the relational expression between the maximum Java heap amount Xmx given as an option when starting the Java virtual machine 10 (Equation 6) JH <Xmx
Instead of (Equation 5), (Equation 7) 2 × Xmx <TM
Can also be used. In this case, the dump method determination unit 7D calculates TM and compares it with twice the value of Xmx. If (Equation 7) is established, the process proceeds to the child process generation unit 7B, otherwise Proceed to conventional dump 7E.
 更に、GCの方式がConcurrent Mark and Sweep方式だった場合、使っているJavaヒープ4の量JHと、Java仮想マシン10の起動時にオプションで与えるJavaヒープの最大量Xmxの間には、次の関係がある:
 (式8)  JH<α×Xmx
αは0<α<1の定数である。αは次のように計算される:
 (式9)  α=(100-MinHeapFreeRatio
        +CMSTriggerRatio×MinHeapFreeRatio/100)/100
MinHeapFreeRatio、CMSTriggerRatioはJava仮想マシン10の起動時オプションであり、Oracle社のJava仮想マシンではデフォルト値がそれぞれ40、80であるので、αのデフォルト値は0.92である。
Furthermore, when the GC method is the Concurrent Mark and Sweep method, the relationship between the amount of Java heap 4 used JH and the maximum amount of Java heap Xmx given as an option when starting the Java virtual machine 10 is as follows: There is:
(Formula 8) JH <α × Xmx
α is a constant of 0 <α <1. α is calculated as follows:
(Formula 9) α = (100-MinHeapFreeRatio
+ CMSTriggerRatio x MinHeapFreeRatio / 100) / 100
MinHeapFreeRatio and CMSTriggerRatio are options at the time of starting the Java virtual machine 10, and the default value of α is 0.92 because the default values are 40 and 80 respectively in the Java virtual machine of Oracle.
 (式5)(式7)(式8)を用いれば、
 (式9)  TM>2×Xmx>2×JH=2×α×Xmx
となる(0<α<1である)。(式7)の代わりに(式9)を用いることで、(式7)を用いた場合よりもより小さなTMの値、すなわちより小さな物理メモリを持つ計算機システムに対しても、thrashingなしで本発明を適用できることがいえる。
(Equation 5) (Equation 7) (Equation 8)
(Formula 9) TM> 2 × Xmx> 2 × JH = 2 × α × Xmx
(0 <α <1). By using (Equation 9) instead of (Equation 7), even for a computer system with a smaller TM value, that is, smaller physical memory than when (Equation 7) is used, this It can be said that the invention can be applied.
 子処理生成部7Bの実行後は、親処理は次に親処理リターン部7Cを実行し、子処理生成部7Bで生成された子処理は子処理ダンプ生成部7Aを実行して、ダンプ処理部7を終了する。 After execution of the child process generation unit 7B, the parent process next executes the parent process return unit 7C, the child process generated by the child process generation unit 7B executes the child process dump generation unit 7A, and the dump process unit Exit 7
 従来方法でのダンプ7Eを実行後は、ダンプ処理部7を終了する。 [After the dump 7E is executed by the conventional method, the dump processing unit 7 is terminated.
 以上、本発明を実施するための実施例について説明したが、本発明はこれらの構成に限定されるものではなく、その趣旨を逸脱しない範囲で種々の構成をとることが可能である。 As mentioned above, although the Example for implementing this invention was described, this invention is not limited to these structures, A various structure can be taken in the range which does not deviate from the meaning.
 また、上述した各機能部を実現するソフトウェア等は、磁気的又は光学的な可搬の記録媒体に記録することもできるし、それらを用いてコンピュータにインストールすることもできる。更に、インターネット等のネットワークを介してダウンロードすることで、コンピュータにインストールすることも可能である。 Further, software or the like that realizes each functional unit described above can be recorded on a magnetic or optical portable recording medium, or can be installed in a computer using them. Further, it can be installed on a computer by downloading via a network such as the Internet.
1…計算機、2…CPU、3…主記憶装置、4…Javaヒープ、5…外部記憶装置、6…ダンプファイル、7…ダンプ処理部、7A…子処理ダンプ生成部、7B…子処理生成部、7C…親処理リターン部、8…I/Oデバイス、9…Javaプログラム、10…Java仮想マシン、11…プログラム実行部 1 ... Computer, 2 ... CPU, 3 ... Main storage, 4 ... Java heap, 5 ... External storage, 6 ... Dump file, 7 ... Dump processing unit, 7A ... Child processing dump generation unit, 7B ... Child processing generation unit 7C ... Parent processing return part, 8 ... I / O device, 9 ... Java program, 10 ... Java virtual machine, 11 ... Program execution part

Claims (12)

  1.  プログラムを実行する親処理の子処理生成部は、主記憶に配置された前記プログラムを含む親処理を主記憶に複製した子処理を生成し、
     子処理のダンプ生成部は、主記憶に複製された子処理がダンプ対象メモリ領域を外部記憶装置へ出力するメモリダンプを実行し、親処理でガベージコレクションが発生する予兆を検知したとき子処理のメモリダンプを抑制することを特徴とする計算機のダンプ情報取得方法。
    The child process generation unit of the parent process that executes the program generates a child process that duplicates the main process including the program arranged in the main memory in the main memory,
    The child process dump generation unit executes a memory dump in which the child process replicated in the main memory outputs the dump target memory area to the external storage device, and detects a sign of occurrence of garbage collection in the parent process. A dump information acquisition method for a computer, characterized by suppressing a memory dump.
  2.  プログラムを実行する親処理の子処理生成部は子処理を生成し、親処理の命令実行部はダンプ対象メモリ領域内のページの属性を読み込み専用に変更し、前記プログラムの実行により記憶保護例外が発生したとき、前記記憶保護例外の発生がダンプ対象の記憶領域であれば当該記憶領域を含むページをコピーし、
     子処理のダンプ生成部は、メモリダンプを実行するとき、前記コピーされたページが存在する場合はコピーされたページを、そうでない場合はオリジナルのページをダンプすることを特徴とする請求項1に記載のダンプ情報取得方法。
    The child process generation unit of the parent process that executes the program generates a child process, the instruction execution unit of the parent process changes the attribute of the page in the memory area to be dumped to read-only, and a storage protection exception is generated by executing the program. When it occurs, if the occurrence of the storage protection exception is a storage area to be dumped, copy the page including the storage area,
    The dump generation unit of the child process dumps the copied page when the copied page exists, and dumps the original page when the copied page exists, when the memory dump is executed. The dump information acquisition method described.
  3.  前記メモリダンプの抑制は前記メモリダンプを親処理でのガベージコレクションが完了するまで中断し、親処理でのガベージコレクション完了後に再開することを特徴とする請求項2に記載のダンプ情報取得方法。 3. The dump information acquisition method according to claim 2, wherein the suppression of the memory dump is suspended until the garbage collection in the parent process is completed and resumed after the garbage collection in the parent process is completed.
  4.  前記ガベージコレクションの予兆は使用する仮想メモリ量が物理メモリ量のあらかじめ定めた一定割合を超えたことであることを特徴とする請求項3に記載のダンプ情報取得方法。 The dump information acquisition method according to claim 3, wherein the sign of the garbage collection is that the amount of virtual memory to be used exceeds a predetermined percentage of the amount of physical memory.
  5.  前記メモリダンプの抑制は前記メモリダンプを終了することを特徴とする請求項1に記載のダンプ情報取得方法。 The dump information acquisition method according to claim 1, wherein the suppression of the memory dump ends the memory dump.
  6.  前記親処理はダンプ方法判定部を備え、
     前記ダンプ方法判定部はガベージコレクション発生時にダンプ情報の生成を中止するかどうかの指示を受け付け、
     前記ダンプ生成部はガベージコレクション発生時に前記受け付けた指示に基づいてダンプ情報の生成を終了するかどうかを決めることを特徴とする請求項1に記載のダンプ情報取得方法。
    The parent process includes a dump method determination unit,
    The dump method determination unit accepts an instruction whether to stop generating dump information when garbage collection occurs,
    The dump information acquisition method according to claim 1, wherein the dump generation unit determines whether to end the generation of dump information based on the received instruction when garbage collection occurs.
  7. 計算機のダンプ情報取得装置であって、
    プログラムを実行する親処理と前記プログラムを主記憶に複製し、子処理を生成する親処理の子処理生成部と、
    主記憶に複製された子処理がダンプ対象メモリ領域を外部記憶装置へ出力するメモリダンプを実行し、親処理でガベージコレクションが発生する兆候を検知したとき、子処理のメモリダンプを抑制する子処理のダンプ生成部とを備えることを特徴とするダンプ情報取得装置。
    A dump information acquisition device for a computer,
    A parent process that executes a program and a child process generator of the parent process that duplicates the program in the main memory and generates a child process;
    A child process that suppresses a memory dump of a child process when a child process copied to the main memory executes a memory dump that outputs the dump target memory area to an external storage device and detects a garbage collection occurrence in the parent process A dump information acquisition apparatus comprising: a dump generation unit.
  8.  子処理を生成する親処理の子処理生成部を備え、親処理の命令実行部はダンプ対象メモリ領域内のページの属性を読み込み専用に変更し、前記プログラムの実行により記憶保護例外が発生したとき、前記記憶保護例外の発生がダンプ対象の記憶領域であれば当該記憶領域を含むページをコピーし、
     子処理のダンプ生成部は、メモリダンプを実行するとき、前記コピーされたページが存在する場合はコピーされたページを、そうでない場合はオリジナルのページをダンプすることを特徴とする請求項7に記載のダンプ情報取得装置。
    When a child process generation unit of a parent process that generates a child process is provided, and the instruction execution unit of the parent process changes the attribute of the page in the memory area to be dumped to read-only, and a storage protection exception occurs due to execution of the program , If the occurrence of the storage protection exception is a storage area to be dumped, copy the page including the storage area,
    The dump generation unit of the child process dumps the copied page when the copied page exists, and dumps the original page when the copied page exists, when the memory dump is executed. The dump information acquisition device described.
  9.  前記メモリダンプの抑制は前記メモリダンプを親処理でのガベージコレクションが完了するまで中断し、親処理でのガベージコレクション完了後に再開することを特徴とする請求項8に記載のダンプ情報取得装置。 The dump information acquisition apparatus according to claim 8, wherein the suppression of the memory dump is interrupted until the garbage collection in the parent process is completed and resumed after the garbage collection in the parent process is completed.
  10.  前記ガベージコレクションの予兆は使用する仮想メモリ量が物理メモリ量のあらかじめ定めた一定割合を超えたことであることを特徴とする請求項9に記載のダンプ情報取得装置。 10. The dump information acquisition apparatus according to claim 9, wherein the sign of the garbage collection is that the amount of virtual memory to be used exceeds a predetermined percentage of the amount of physical memory.
  11.  前記メモリダンプの抑制は前記メモリダンプを終了することを特徴とする請求項7に記載のダンプ情報取得装置。 The dump information acquisition apparatus according to claim 7, wherein the suppression of the memory dump ends the memory dump.
  12.  前記親処理はダンプ方法判定部を備え、
     前記ダンプ方法判定部はガベージコレクション発生時にダンプ情報の生成を中止するかどうかの指示を受け付け、
     前記ダンプ生成部はガベージコレクション発生時に前記受け付けた指示に基づいてダンプ情報の生成を終了するかどうかを決めることを特徴とする請求項7に記載のダンプ情報取得装置。
    The parent process includes a dump method determination unit,
    The dump method determination unit accepts an instruction whether to stop generating dump information when garbage collection occurs,
    The dump information acquisition apparatus according to claim 7, wherein the dump generation unit determines whether to end the generation of dump information based on the received instruction when garbage collection occurs.
PCT/JP2015/052611 2015-01-30 2015-01-30 Dump file generation method and dump file generation device WO2016121077A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/052611 WO2016121077A1 (en) 2015-01-30 2015-01-30 Dump file generation method and dump file generation device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/052611 WO2016121077A1 (en) 2015-01-30 2015-01-30 Dump file generation method and dump file generation device

Publications (1)

Publication Number Publication Date
WO2016121077A1 true WO2016121077A1 (en) 2016-08-04

Family

ID=56542728

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2015/052611 WO2016121077A1 (en) 2015-01-30 2015-01-30 Dump file generation method and dump file generation device

Country Status (1)

Country Link
WO (1) WO2016121077A1 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106354646A (en) * 2016-08-30 2017-01-25 竞技世界(北京)网络技术有限公司 Method for analyzing dump files
WO2018158906A1 (en) * 2017-03-02 2018-09-07 三菱電機株式会社 Process data recording device and process data recording program

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006350876A (en) * 2005-06-20 2006-12-28 Hitachi Ltd Heap dump acquisition method
JP2008027232A (en) * 2006-07-21 2008-02-07 Nippon Telegr & Teleph Corp <Ntt> Dump method and dump device
US20140040669A1 (en) * 2012-08-04 2014-02-06 Microsoft Corporation Historical Software Diagnostics using Lightweight Process Snapshots

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006350876A (en) * 2005-06-20 2006-12-28 Hitachi Ltd Heap dump acquisition method
JP2008027232A (en) * 2006-07-21 2008-02-07 Nippon Telegr & Teleph Corp <Ntt> Dump method and dump device
US20140040669A1 (en) * 2012-08-04 2014-02-06 Microsoft Corporation Historical Software Diagnostics using Lightweight Process Snapshots

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106354646A (en) * 2016-08-30 2017-01-25 竞技世界(北京)网络技术有限公司 Method for analyzing dump files
CN106354646B (en) * 2016-08-30 2018-12-25 竞技世界(北京)网络技术有限公司 A method of analysis dump file
WO2018158906A1 (en) * 2017-03-02 2018-09-07 三菱電機株式会社 Process data recording device and process data recording program

Similar Documents

Publication Publication Date Title
US8510597B2 (en) Providing restartable file systems within computing devices
US7774636B2 (en) Method and system for kernel panic recovery
US9996378B2 (en) Managing a check-point based high-availability backup virtual machine
US8689211B2 (en) Live migration of virtual machines in a computing environment
US9727274B2 (en) Cloning live virtual machines
US9448895B2 (en) Recording activity of software threads in a concurrent software environment
JP6882662B2 (en) Migration program, information processing device and migration method
US11126454B2 (en) Enforcing retention policies with respect to virtual machine snapshots
US20110202728A1 (en) Methods and apparatus for managing cache persistence in a storage system using multiple virtual machines
US9128881B2 (en) Recovery for long running multithreaded processes
JP2013520744A (en) Method and apparatus for generating minimum boot image
US8095510B2 (en) Data restoration in a storage system using multiple restore points
CN104516943A (en) Archival management of database logs
CN101154185A (en) Software Runtime Execution Recovery and Replay Method
US9507657B2 (en) Investigation program, information processing apparatus, and information processing method
US20120331261A1 (en) Point-in-Time Copying of Virtual Storage
WO2016121077A1 (en) Dump file generation method and dump file generation device
JP5578897B2 (en) Backup program, method and computer
US8892838B2 (en) Point-in-time copying of virtual storage and point-in-time dumping
CN113590212A (en) Starting method, device and equipment of database instance
CN104102528A (en) Quick performance restoration method of virtual machine monitor
CN114756355B (en) Method and device for automatically and quickly recovering process of computer operating system
US20140082313A1 (en) Storage class memory evacuation
US11334445B2 (en) Using non-volatile memory to improve the availability of an in-memory database
JP2959061B2 (en) Backup file creation device

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 15879974

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 15879974

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP