diff --git a/examples/psutil/mem/vmem/.gitignore b/examples/psutil/mem/vmem/.gitignore
new file mode 100644
index 00000000..7a0b7f00
--- /dev/null
+++ b/examples/psutil/mem/vmem/.gitignore
@@ -0,0 +1 @@
+app
\ No newline at end of file
diff --git a/examples/psutil/mem/vmem/README.md b/examples/psutil/mem/vmem/README.md
new file mode 100644
index 00000000..90116fcd
--- /dev/null
+++ b/examples/psutil/mem/vmem/README.md
@@ -0,0 +1,14 @@
+# これは何?
+
+[gopsutil](https://github.com/shirou/gopsutil)を用いてメモリ消費量を取得するサンプルです。
+
+```sh
+$ task
+task: [build] go build -o app main.go
+task: [run] ./app
+07:25:17 Total=7938MB   Used=1569MB     Free= 417MB
+07:25:18 Total=7938MB   Used=1722MB     Free= 264MB
+07:25:19 Total=7938MB   Used=1850MB     Free= 187MB
+07:25:20 Total=7938MB   Used=1886MB     Free= 151MB
+07:25:21 Total=7938MB   Used=1886MB     Free= 151MB
+```
diff --git a/examples/psutil/mem/vmem/Taskfile.yml b/examples/psutil/mem/vmem/Taskfile.yml
new file mode 100644
index 00000000..928cd9cb
--- /dev/null
+++ b/examples/psutil/mem/vmem/Taskfile.yml
@@ -0,0 +1,15 @@
+# https://taskfile.dev
+
+version: '3'
+
+tasks:
+  default:
+    cmds:
+      - task: build
+      - task: run
+  build:
+    cmds:
+      - go build -o app main.go
+  run:
+    cmds:
+      - ./app
\ No newline at end of file
diff --git a/examples/psutil/mem/vmem/main.go b/examples/psutil/mem/vmem/main.go
new file mode 100644
index 00000000..f8b84043
--- /dev/null
+++ b/examples/psutil/mem/vmem/main.go
@@ -0,0 +1,66 @@
+package main
+
+import (
+	"log"
+	"time"
+
+	"github.com/shirou/gopsutil/v4/mem"
+)
+
+func main() {
+	log.SetFlags(log.Ltime)
+
+	if err := run(); err != nil {
+		log.Fatal(err)
+	}
+}
+
+func run() error {
+	const (
+		COUNT = 5
+	)
+	var (
+		interval = 1 * time.Second
+		mb       = func(v uint64) uint64 {
+			// 概算値で良いので整数除算
+			return v >> 20
+		}
+		done   = make(chan struct{})
+		useMem = func(done <-chan struct{}, ready chan<- struct{}, bufSize uint64) {
+			buf := make([]byte, bufSize)
+			for i := range len(buf) {
+				buf[i] = 0
+			}
+
+			close(ready)
+			<-done
+		}
+	)
+	for range COUNT {
+		// 現在のメモリ量を取得
+		var (
+			vms *mem.VirtualMemoryStat
+			err error
+		)
+		vms, err = mem.VirtualMemory()
+		if err != nil {
+			return err
+		}
+
+		log.Printf("Total=%4dMB\tUsed=%4dMB\tFree=%4dMB", mb(vms.Total), mb(vms.Used), mb(vms.Free))
+
+		// 意図的にメモリを占有していく
+		var (
+			ready = make(chan struct{})
+		)
+		go useMem(done, ready, 150<<20)
+		<-ready
+
+		time.Sleep(interval)
+	}
+
+	close(done)
+	time.Sleep(500 * time.Millisecond)
+
+	return nil
+}