ต่อไปนี้เป็นการใช้หน่วยความจำของmysql
และapache
ตามลำดับบนเซิร์ฟเวอร์ของฉัน ตามผลลัพธ์ของการpmap
พูดmysql
ใช้ประมาณ 379M และapache
ใช้ 277M
[root@server ~]# pmap 10436 | grep total
total 379564K
[root@server ~]# pmap 10515 | grep total
total 277588K
เปรียบเทียบสิ่งนี้กับผลลัพธ์ของtop
ฉันเห็นค่าเกือบจะตรงกัน
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10515 apache 20 0 271m 32m 3132 S 0.0 6.6 0:00.73 /usr/sbin/httpd
10436 mysql 20 0 370m 21m 6188 S 0.0 4.3 0:06.07 /usr/libexec/mysqld --basedir=....
ตอนนี้ค่าเหล่านี้ไม่ใช่การใช้หน่วยความจำในปัจจุบันของทั้งสองกระบวนการเนื่องจากถ้าเป็นเพราะมันจะมีขนาดเกิน 512M ram
บนระบบของฉันและฉันเข้าใจความจริงที่ว่าขนาดเหล่านี้เป็นขนาดของหน้าที่กำหนดให้กับกระบวนการทั้งสองนี้ ขนาดของหน่วยความจำที่ใช้โดยพวกเขา ตอนนี้เมื่อเราใช้pmap -x
ฉันเห็น coloumn พิเศษDirty
ซึ่งแสดงการใช้หน่วยความจำน้อยกว่าสำหรับกระบวนการ ดังที่เห็นในตัวอย่างที่แสดงด้านล่างDirty
coloumn แสดง 15M เมื่อเทียบกับ 379M ใน coloumn แรก คำถามของฉันคือ: ค่าภายใต้ coloumn Dirty
คือจำนวนหน่วยความจำ 'จริง' ที่ใช้โดยกระบวนการนั้นหรือไม่? หากไม่เป็นเช่นนั้นเราจะทราบการใช้หน่วยความจำจริงของกระบวนการได้อย่างไร ไม่ps
และtop
ด้วยเหตุผลเดียวกันข้างต้น เรามีอะไรที่อยู่ภายใต้/proc
ที่จะให้ข้อมูลนี้
[root@server ~]# pmap -x 10436 | grep total
total kB 379564 21528 15340
[root@server ~]#
[root@server ~]# free -m
total used free shared buffers cached
Mem: 489 447 41 0 52 214
-/+ buffers/cache: 180 308
Swap: 1023 0 1023
[root@server ~]#