Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Canread
Gopsutil
提交
c1313e76
G
Gopsutil
项目概览
Canread
/
Gopsutil
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gopsutil
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c1313e76
编写于
9月 18, 2015
作者:
S
shirou
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #82 from influxdb/darwin-mem
Use vm_stat command on darwin to get memory
上级
be88485e
4bba3025
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
133 addition
and
22 deletion
+133
-22
mem/mem_darwin.go
mem/mem_darwin.go
+66
-22
mem/mem_darwin_test.go
mem/mem_darwin_test.go
+67
-0
未找到文件。
mem/mem_darwin.go
浏览文件 @
c1313e76
...
...
@@ -20,45 +20,89 @@ func getPageSize() (uint64, error) {
if
err
!=
nil
{
return
0
,
err
}
return
p
,
nil
}
// Runs vm_stat and returns Free and inactive pages
func
getVmStat
(
pagesize
uint64
,
vms
*
VirtualMemoryStat
)
error
{
out
,
err
:=
exec
.
Command
(
"vm_stat"
)
.
Output
()
if
err
!=
nil
{
return
err
}
return
parseVmStat
(
string
(
out
),
pagesize
,
vms
)
}
func
parseVmStat
(
out
string
,
pagesize
uint64
,
vms
*
VirtualMemoryStat
)
error
{
var
err
error
lines
:=
strings
.
Split
(
out
,
"
\n
"
)
for
_
,
line
:=
range
lines
{
fields
:=
strings
.
Split
(
line
,
":"
)
if
len
(
fields
)
<
2
{
continue
}
key
:=
strings
.
TrimSpace
(
fields
[
0
])
value
:=
strings
.
Trim
(
fields
[
1
],
" ."
)
switch
key
{
case
"Pages free"
:
free
,
e
:=
strconv
.
ParseUint
(
value
,
10
,
64
)
if
e
!=
nil
{
err
=
e
}
vms
.
Free
=
free
*
pagesize
case
"Pages inactive"
:
inactive
,
e
:=
strconv
.
ParseUint
(
value
,
10
,
64
)
if
e
!=
nil
{
err
=
e
}
vms
.
Cached
+=
inactive
*
pagesize
vms
.
Inactive
=
inactive
*
pagesize
case
"Pages active"
:
active
,
e
:=
strconv
.
ParseUint
(
value
,
10
,
64
)
if
e
!=
nil
{
err
=
e
}
vms
.
Active
=
active
*
pagesize
case
"Pages wired down"
:
wired
,
e
:=
strconv
.
ParseUint
(
value
,
10
,
64
)
if
e
!=
nil
{
err
=
e
}
vms
.
Wired
=
wired
*
pagesize
case
"Pages purgeable"
:
purgeable
,
e
:=
strconv
.
ParseUint
(
value
,
10
,
64
)
if
e
!=
nil
{
err
=
e
}
vms
.
Cached
+=
purgeable
*
pagesize
}
}
return
err
}
// VirtualMemory returns VirtualmemoryStat.
func
VirtualMemory
()
(
*
VirtualMemoryStat
,
error
)
{
ret
:=
&
VirtualMemoryStat
{}
p
,
err
:=
getPageSize
()
if
err
!=
nil
{
return
nil
,
err
}
total
,
err
:=
common
.
DoSysctrl
(
"hw.memsize"
)
t
,
err
:=
common
.
DoSysctrl
(
"hw.memsize"
)
if
err
!=
nil
{
return
nil
,
err
}
free
,
err
:=
common
.
DoSysctrl
(
"vm.page_free_count"
)
total
,
err
:=
strconv
.
ParseUint
(
t
[
0
],
10
,
64
)
if
err
!=
nil
{
return
nil
,
err
}
parsed
:=
make
([]
uint64
,
0
,
7
)
vv
:=
[]
string
{
total
[
0
],
free
[
0
],
}
for
_
,
target
:=
range
vv
{
t
,
err
:=
strconv
.
ParseUint
(
target
,
10
,
64
)
if
err
!=
nil
{
return
nil
,
err
}
parsed
=
append
(
parsed
,
t
)
}
ret
:=
&
VirtualMemoryStat
{
Total
:
parsed
[
0
],
Free
:
parsed
[
1
]
*
p
,
err
=
getVmStat
(
p
,
ret
)
if
err
!=
nil
{
return
nil
,
err
}
// TODO: platform independent (worked freebsd?)
ret
.
Available
=
ret
.
Free
+
ret
.
Buffers
+
ret
.
Cached
ret
.
Available
=
ret
.
Free
+
ret
.
Cached
ret
.
Total
=
total
ret
.
Used
=
ret
.
Total
-
ret
.
Free
ret
.
UsedPercent
=
float64
(
ret
.
Total
-
ret
.
Available
)
/
float64
(
ret
.
Total
)
*
100.0
...
...
mem/mem_darwin_test.go
0 → 100644
浏览文件 @
c1313e76
// +build darwin
package
mem
import
(
"testing"
)
var
vm_stat_out
=
`
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free: 105885.
Pages active: 725641.
Pages inactive: 449242.
Pages speculative: 6155.
Pages throttled: 0.
Pages wired down: 560835.
Pages purgeable: 128967.
"Translation faults": 622528839.
Pages copy-on-write: 17697839.
Pages zero filled: 311034413.
Pages reactivated: 4705104.
Pages purged: 5605610.
File-backed pages: 349192.
Anonymous pages: 831846.
Pages stored in compressor: 876507.
Pages occupied by compressor: 249167.
Decompressions: 4555025.
Compressions: 7524729.
Pageins: 40532443.
Pageouts: 126496.
Swapins: 2988073.
Swapouts: 3283599.
`
func
TestParseVmStat
(
t
*
testing
.
T
)
{
ret
:=
&
VirtualMemoryStat
{}
err
:=
parseVmStat
(
vm_stat_out
,
4096
,
ret
)
if
err
!=
nil
{
t
.
Errorf
(
"Expected no error, got %s
\n
"
,
err
.
Error
())
}
if
ret
.
Free
!=
uint64
(
105885
*
4096
)
{
t
.
Errorf
(
"Free pages, actual: %d, expected: %d"
,
ret
.
Free
,
105885
*
4096
)
}
if
ret
.
Inactive
!=
uint64
(
449242
*
4096
)
{
t
.
Errorf
(
"Inactive pages, actual: %d, expected: %d"
,
ret
.
Inactive
,
449242
*
4096
)
}
if
ret
.
Active
!=
uint64
(
725641
*
4096
)
{
t
.
Errorf
(
"Active pages, actual: %d, expected: %d"
,
ret
.
Active
,
725641
*
4096
)
}
if
ret
.
Wired
!=
uint64
(
560835
*
4096
)
{
t
.
Errorf
(
"Wired pages, actual: %d, expected: %d"
,
ret
.
Wired
,
560835
*
4096
)
}
if
ret
.
Cached
!=
uint64
(
128967
*
4096
+
449242.
*
4096
)
{
t
.
Errorf
(
"Cached pages, actual: %d, expected: %d"
,
ret
.
Cached
,
128967
*
4096
+
449242.
*
4096
)
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录