2 * Copyright (C) 2018 Oracle.
3 * Copyright 2019 Joyent, Inc.
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
23 #include <sys/procfs.h>
28 static unsigned long max_size
;
31 unsigned long get_mem_kb(void)
33 static int my_fd
= -2;
37 /* Do not repeatedly attempt this if it fails. */
38 my_fd
= open("/proc/self/psinfo", O_RDONLY
);
44 if (pread(my_fd
, &pbuf
, sizeof (pbuf
), 0) != sizeof (pbuf
)) {
48 return (pbuf
.pr_rssize
);
51 unsigned long get_mem_kb(void)
57 file
= fopen("/proc/self/statm", "r");
60 fread(buf
, 1, sizeof(buf
), file
);
63 size
= strtoul(buf
, NULL
, 10);
64 size
= size
* sysconf(_SC_PAGESIZE
) / 1024;
69 static void match_end_func(struct symbol
*sym
)
80 unsigned long get_max_memory(void)
85 void register_mem_tracker(int id
)
89 add_hook(&match_end_func
, END_FUNC_HOOK
);