ใช้หน่วยความจำบน Solaris 10


10

อีกหนึ่งคำถามเกี่ยวกับหน่วยความจำบน Solaris 10

ด้านบนแสดงให้เห็นว่าฉันมีหน่วยความจำ 672 MB ฟรี:

130 processes: 126 sleeping, 2 zombie, 2 on cpu
CPU states: 95.1% idle,  3.9% user,  1.0% kernel,  0.0% iowait,  0.0% swap
Memory: 16G phys mem, 672M free mem, 2048M total swap, 2023M free swap

vmstatแสดงให้เห็นว่าฉันเหมือนเดิม:

kthr      memory            page            disk          faults      cpu
r b w   swap  free  re  mf pi po fr de sr rm s0 s1 s2   in   sy   cs us sy id
0 0 0 564744 687896  3  13  0  0  0  0  0  0  0  0  0  354  667  752  1  1 98

แต่เมื่อฉันทำprstat -a- ขนาดฉันได้รับนี้:

NPROC USERNAME  SWAP   RSS MEMORY      TIME  CPU
   45 orbixadm 1449M 1592M   9.7%   4:46:53 0.4%
   48 root      146M  160M   1.0%   8:09:49 1.2%
    3 user1      46M  204M   1.2%   0:00:45 0.0%
    9 webservd   46M   14M   0.1%   0:00:00 0.0%
    5 ctxsrvr    28M   32M   0.2%   4:54:51 0.0%
   11 user2      23M   34M   0.2%   0:00:37 0.2%
    4 user3    4840K   11M   0.1%   0:00:01 0.0%
    1 smmsp    1456K 4552K   0.0%   0:00:24 0.0%
    2 daemon   2128K 6224K   0.0%   0:06:32 0.0%
    1 user4    1232K 3608K   0.0%   0:00:00 0.0%
    1 nagios    376K 2472K   0.0%   0:15:18 0.0%

และอย่างที่คุณเห็นผลรวมของค่า RSS ไม่ถึงหน่วยความจำ 15GB และแม้ว่าฉันจะเพิ่มค่า SWAP

ดังนั้นคำถามของฉันคือฉันเชื่อว่าคำสั่งใด

หากด้านบนและ vmstat ให้ผลลัพธ์ที่ดีกับฉันหน่วยความจำ 15GB ของฉันจะใช้ที่ไหน ถ้าไม่ทำไมพวกเขาแสดงให้ฉันเห็นว่า?

แก้ไข: ผลลัพธ์สำหรับคำสั่ง: % echo ::memstat | mdb -k

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    1687138             13180   82%
Anon                       137110              1071    7%
Exec and libs               47107               368    2%
Page cache                  95277               744    5%
Free (cachelist)            22248               173    1%
Free (freelist)             69592               543    3%

Total                     2058472             16081
Physical                  2055442             16058

แก้ไข 2:

ตกลงตอนนี้ฉันเห็นหน่วยความจำที่แคช ARC ใช้แล้ว
แต่ด้วยการทดสอบใหม่ตอนนี้ฉันมี:

2066 MB used( prstat -Zและecho :: memstat | mdb -kผล)
1193 MB free( ผลสูงสุด )
8859 MB ARC cache( kstat zfs :: arcstats:ผลขนาด )

ซึ่งทำให้เรามีมากหรือน้อยของหน่วยความจำในขณะที่ระบบของฉันมี12 GB บางทีฉันอาจพลาดอย่างอื่น แต่อีกอันอยู่ที่ไหน?16 GB
4 GB


โปรดเพิ่มkstat zfs::arcstats:sizeผลลัพธ์ให้กับคำถามของคุณ
jlliagre

คำตอบ:


12

ZFS มีแนวโน้มที่จะใช้หน่วยความจำส่วนใหญ่เป็นแคช ARC หากคุณต้องการทราบวิธีการใช้ RAM ของคุณให้เรียกใช้คำสั่งนี้เป็นรูท:

# echo ::memstat | mdb -k

บน Solaris 10 10/09 และใหม่กว่านี้แสดงสิ่งนี้:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                      60569               236   16%
ZFS File Data               53270               208   14%
Anon                        41305               161   11%
Exec and libs                5891                23    2%
Page cache                   1190                 4    0%
Free (cachelist)             7006                27    2%
Free (freelist)            212607               830   56%

Total                      381838              1491

อย่างที่คุณเห็นมีบรรทัดที่ระบุจำนวน RAM ที่ใช้ในการแคชข้อมูลไฟล์ ZFS น่าเสียดายที่คุณกำลังเรียกใช้ Solaris 10 รุ่นเก่าดังนั้น memstat จะไม่แสดงสถิติ ZFS นี้แยกจากกัน มันมาพร้อมกับหน่วยความจำที่ใช้เคอร์เนลซึ่งทำให้เกิดความสับสน เคอร์เนลไม่ควรใช้ RAM ขนาด 13 GB ภายใต้สถานการณ์ปกติ

อย่างไรก็ตามยังมีวิธีแสดงขนาด ARC แบบเต็มบนเซิร์ฟเวอร์ของคุณ

เพียงรันคำสั่งนี้:

# kstat zfs::arcstats:size
module: zfs                             instance: 0
name:   arcstats                        class:    misc
        size                            273469024

มันแสดงให้เห็นว่าในเครื่องของฉัน RAM 273 MB ถูกใช้เพื่อจัดการแคช ZFS ARC memstat แสดงให้เห็นว่าจาก 273 MB เหล่านี้จะใช้ 208 MB เป็นไฟล์แคช RAM ขนาด 208 MB เหล่านี้สามารถเผยแพร่ได้อัตโนมัติตามต้องการหากแอปพลิเคชันต้องการ

ตอนนี้ให้ดูกระบวนการการใช้หน่วยความจำ หากคุณใช้อ็อพชัน -Z พร้อมกับ prstat จะแสดงข้อมูลสรุปต่อโซนภายใต้สถิติต่อกระบวนการ ที่นี่โซนส่วนกลาง (และอย่างเดียว) ใช้ RAM 185 MB สิ่งนี้ (โดยประมาณ) ตรงกับผลรวมของคอลัมน์กระบวนการทั้งหมด rss

# prstat -Z
PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
   741 noaccess  129M  113M sleep   59    0   0:00:35 1,4% java/18
   973 root     5148K  832K run     29    0   0:00:00 0,4% script/1
   972 root     5072K  900K sleep   59    0   0:00:00 0,2% script/1
   998 root     7148K 2812K cpu0    49    0   0:00:00 0,1% prstat/1
   974 root     3456K  968K sleep   49    0   0:00:00 0,1% ksh/1
     5 root        0K    0K sleep   99  -20   0:00:01 0,1% zpool-rpool/37
   241 root     5400K 1608K sleep   59    0   0:00:00 0,0% VBoxService/5
    77 root     7620K 2356K sleep   59    0   0:00:00 0,0% devfsadm/7
   969 root     3372K  936K sleep   59    0   0:00:00 0,0% script/1
   126 root     9664K 2844K sleep   59    0   0:00:00 0,0% nscd/31
   480 root     9420K 2036K sleep   59    0   0:00:00 0,0% sendmail/1
    11 root     9164K 7860K sleep   59    0   0:00:29 0,0% svc.configd/17
     1 root     2504K 1432K sleep   59    0   0:00:00 0,0% init/1
   413 root       15M 9644K sleep   59    0   0:00:00 0,0% fmd/19
   377 root     6536K 2848K sleep   59    0   0:00:02 0,0% inetd/4
ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE
     0       48  177M  185M    12%   0:01:24 2,5% global

185 MB เหล่านี้สอดคล้องกับผลรวมของสองบรรทัดในเอาต์พุต memstat: "Anon" ซึ่งเป็น RAM ที่ใช้โดยแอปพลิเคชันเพื่อเก็บข้อมูลและ "Exec และ libs" ซึ่งเป็นแอปพลิเคชันและรหัสไลบรารีของพวกเขา


ขอบคุณสำหรับการตอบกลับของคุณเช่นกันผลลัพธ์ของคำสั่งนั้นไม่ละเอียดมากนัก แต่มีความจำเป็นที่จะต้องดูว่าใช้ RAM อะไร
Jeremy C.

คุณสามารถเพิ่มการส่งออกโดยการปรับปรุงคำถามของคุณ? อย่างไรก็ตามคำตอบที่คุณยอมรับนั้นไม่ถูกต้องเพียงเล็กน้อยเนื่องจากหน้าเว็บที่ไม่มีการแมปจะถูกรายงานว่าเป็น RAM ฟรีโดย Solaris ไม่ใช่การใช้งานซึ่งเป็นปัญหาที่คุณร้องเรียน
jlliagre

คำถามที่แก้ไขด้วยผลลัพธ์คำสั่ง คุณถูกคำถามของฉันจะไม่ตอบทั้งหมด อย่างน้อยเราก็จะเห็นว่าหน่วยความจำฟรีเป็นเช่นเดียวกันกับด้านบนและvmstatกว่าด้วย:: memstat แต่มี meanning เพื่อดูรายละเอียดสิ่งที่ ued โดยแต่ละกระบวนการคืออะไร?
Jeremy C.

คุณใช้โซลาริส 10 รุ่นใด (cat / etc / release) และคุณใช้ ZFS อยู่?
jlliagre

เป็น Solaris 10 5/09 และใช่ฉันใช้ ZFS
Jeremy C.

4

หน่วยความจำเต็มไปด้วยเพจที่ไม่มีการแมปข้อมูลที่อ่านจากดิสก์ มันถูกเก็บไว้ในหน่วยความจำเพราะไฟล์เหล่านั้นอาจถูกอ่านอีกครั้งและการเก็บข้อมูลในหน่วยความจำจะบันทึกการอ่านดิสก์ หน่วยความจำว่างจะสูญเปล่าตลอดไปดังนั้นคอมพิวเตอร์จึงพยายามเก็บให้น้อยที่สุดเท่าที่จะทำได้

ตัวอย่างเช่นสมมติว่าคุณรันโปรแกรม โปรแกรมสิ้นสุดลง โปรแกรมยังอยู่ในหน่วยความจำ แต่หน้าหน่วยความจำเหล่านั้นไม่ได้ใช้โดยกระบวนการใด ๆ เนื่องจากโปรแกรมไม่ทำงาน หากระบบไม่ได้อยู่ภายใต้ความกดดันของหน่วยความจำหน้าต่างๆจะถูกเก็บไว้ในหน่วยความจำ หากโปรแกรมทำงานอีกครั้งจะเป็นการประหยัดเวลาในการพยายามจัดสรรหน่วยความจำเพิ่มเติมสำหรับโปรแกรมแล้วจึงอ่านใหม่อีกครั้ง และหากหน้าจำเป็นสำหรับสิ่งอื่น ๆ ก็ยังคงเป็นระบบชนะเพราะมันง่ายกว่าที่จะย้ายหน้าหน่วยความจำโดยตรงจากการใช้ไปยังอีกกว่าทำให้มันฟรีเท่านั้นที่จะใช้มันอีกครั้ง

หน่วยความจำไม่ใช่ทรัพยากรที่สามารถบันทึกได้ หากคุณปล่อยให้ 1GB ฟรีเป็นเวลาหนึ่งชั่วโมงสิ่งที่คุณสามารถทำได้กับข้อมูลนั้นจะสูญหายไปตลอดกาล


ขอบคุณสำหรับคำตอบที่อธิบายได้ดี ตอนนี้ฉันเข้าใจแล้วว่าเหตุใดเซิร์ฟเวอร์โซลาริสทั้งหมดของฉันจึงใช้ RAM 90% ขึ้นไป
Jeremy C.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.