@@ -2195,29 +2195,35 @@ void os::Linux::print_process_memory_info(outputStream* st) {
21952195 int num_found = 0 ;
21962196 FILE* f = ::fopen (" /proc/self/status" , " r" );
21972197 char buf[256 ];
2198- while (::fgets (buf, sizeof (buf), f) != NULL && num_found < num_values) {
2199- if ( (vmsize == -1 && sscanf (buf, " VmSize: " SSIZE_FORMAT " kB" , &vmsize) == 1 ) ||
2200- (vmpeak == -1 && sscanf (buf, " VmPeak: " SSIZE_FORMAT " kB" , &vmpeak) == 1 ) ||
2201- (vmswap == -1 && sscanf (buf, " VmSwap: " SSIZE_FORMAT " kB" , &vmswap) == 1 ) ||
2202- (vmhwm == -1 && sscanf (buf, " VmHWM: " SSIZE_FORMAT " kB" , &vmhwm) == 1 ) ||
2203- (vmrss == -1 && sscanf (buf, " VmRSS: " SSIZE_FORMAT " kB" , &vmrss) == 1 ) ||
2204- (rssanon == -1 && sscanf (buf, " RssAnon: " SSIZE_FORMAT " kB" , &rssanon) == 1 ) ||
2205- (rssfile == -1 && sscanf (buf, " RssFile: " SSIZE_FORMAT " kB" , &rssfile) == 1 ) ||
2206- (rssshmem == -1 && sscanf (buf, " RssShmem: " SSIZE_FORMAT " kB" , &rssshmem) == 1 )
2207- )
2208- {
2209- num_found ++;
2198+ if (f != NULL ) {
2199+ while (::fgets (buf, sizeof (buf), f) != NULL && num_found < num_values) {
2200+ if ( (vmsize == -1 && sscanf (buf, " VmSize: " SSIZE_FORMAT " kB" , &vmsize) == 1 ) ||
2201+ (vmpeak == -1 && sscanf (buf, " VmPeak: " SSIZE_FORMAT " kB" , &vmpeak) == 1 ) ||
2202+ (vmswap == -1 && sscanf (buf, " VmSwap: " SSIZE_FORMAT " kB" , &vmswap) == 1 ) ||
2203+ (vmhwm == -1 && sscanf (buf, " VmHWM: " SSIZE_FORMAT " kB" , &vmhwm) == 1 ) ||
2204+ (vmrss == -1 && sscanf (buf, " VmRSS: " SSIZE_FORMAT " kB" , &vmrss) == 1 ) ||
2205+ (rssanon == -1 && sscanf (buf, " RssAnon: " SSIZE_FORMAT " kB" , &rssanon) == 1 ) ||
2206+ (rssfile == -1 && sscanf (buf, " RssFile: " SSIZE_FORMAT " kB" , &rssfile) == 1 ) ||
2207+ (rssshmem == -1 && sscanf (buf, " RssShmem: " SSIZE_FORMAT " kB" , &rssshmem) == 1 )
2208+ )
2209+ {
2210+ num_found ++;
2211+ }
22102212 }
2211- }
2212- st->print_cr (" Virtual Size: " SSIZE_FORMAT " K (peak: " SSIZE_FORMAT " K)" , vmsize, vmpeak);
2213- st->print (" Resident Set Size: " SSIZE_FORMAT " K (peak: " SSIZE_FORMAT " K)" , vmrss, vmhwm);
2214- if (rssanon != -1 ) { // requires kernel >= 4.5
2215- st->print (" (anon: " SSIZE_FORMAT " K, file: " SSIZE_FORMAT " K, shmem: " SSIZE_FORMAT " K)" ,
2216- rssanon, rssfile, rssshmem);
2217- }
2218- st->cr ();
2219- if (vmswap != -1 ) { // requires kernel >= 2.6.34
2220- st->print_cr (" Swapped out: " SSIZE_FORMAT " K" , vmswap);
2213+ fclose (f);
2214+
2215+ st->print_cr (" Virtual Size: " SSIZE_FORMAT " K (peak: " SSIZE_FORMAT " K)" , vmsize, vmpeak);
2216+ st->print (" Resident Set Size: " SSIZE_FORMAT " K (peak: " SSIZE_FORMAT " K)" , vmrss, vmhwm);
2217+ if (rssanon != -1 ) { // requires kernel >= 4.5
2218+ st->print (" (anon: " SSIZE_FORMAT " K, file: " SSIZE_FORMAT " K, shmem: " SSIZE_FORMAT " K)" ,
2219+ rssanon, rssfile, rssshmem);
2220+ }
2221+ st->cr ();
2222+ if (vmswap != -1 ) { // requires kernel >= 2.6.34
2223+ st->print_cr (" Swapped out: " SSIZE_FORMAT " K" , vmswap);
2224+ }
2225+ } else {
2226+ st->print_cr (" Could not open /proc/self/status to get process memory related information" );
22212227 }
22222228
22232229 // Print glibc outstanding allocations.
0 commit comments