我在我的MySQL框中懷疑一些交換活動。我運行了「頂級」工具,它給了我51MB的交換空間。解釋頂部工具中的交換
但是,當我啓用頂部實用程序中的「Swap」列時,它顯示實際上有12g由mysqld使用的交換。
你能告訴我哪個是準確的信息嗎?是否有任何交換髮生?
我在我的MySQL框中懷疑一些交換活動。我運行了「頂級」工具,它給了我51MB的交換空間。解釋頂部工具中的交換
但是,當我啓用頂部實用程序中的「Swap」列時,它顯示實際上有12g由mysqld使用的交換。
你能告訴我哪個是準確的信息嗎?是否有任何交換髮生?
編輯:從我讀過的東西,在最高的輸出SWAP列真的只是VIRT - RES
。這是一個假設,部分流程已被換出。要準確衡量給定流程使用的交換量是困難的或不可能的。
如果你在Linux或支持/proc
,你可以用它來得到實際使用的UNIX版本之一:
cat /proc/18810/status
(18810哪裏是你的mysqld進程的PID)
它會顯示一堆用於實際內存使用情況的字段。下面是一個除了在我的開發VM mysqld進程:
VmPeak: 3258116 kB
VmSize: 3258116 kB
VmLck: 1416344 kB
VmHWM: 1180788 kB
VmRSS: 1180780 kB
VmData: 3189940 kB
VmStk: 88 kB
VmExe: 11608 kB
VmLib: 7312 kB
VmPTE: 2540 kB
VmSwap: 0 kB
0 VmSwap表明它目前沒有使用任何交換。
請參閱http://man7.org/linux/man-pages/man5/proc.5.html或只是瞭解其他領域的信息。手冊中部分說:
- VmSwap:換出的匿名私人頁面虛擬內存的大小;不包括shmem swap用法(自Linux 2.6.34起)。
回覆您的評論:
顯然,你使用Linux的版本太舊,包括在每個進程狀態VmSwap領域。
您可以閱讀/proc/meminfo並找出服務器上正在使用的交換空間總量,但這不會告訴您每個進程。
您也可以運行vmstat來觀察交換活動。如果「si」和「so」字段爲零,則表示沒問題。
我跑在紅帽Linux的PROC但找不到VmSwap輸出。 '貓的/ proc/18810 /狀態 名稱:mysqld的 狀態:S(睡覺) SleepAVG:92% TGID:18810 PID:18810 PPID:18780 TracerPid:0 發表於:501 501 501 501 GID:501 501 501 501 FDSize:16384個 組:501 VmSize:101891248 KB VmLck:0 KB VmRSS:88391188 KB VmData:101868740 KB VmStk:56 KB VmExe:6257 KB vmLib中:2223 KB ...' – Haans
「頂部輸出中的SWAP列顯示瞭如果它必須交換,它將使用多少交換」---這真的需要進一步闡述:例如,爲什麼12g不是84g? – zerkms
另一種解釋:SWAP是一個虛假號碼,它只是'VIRT - RES'。如這裏所述:http://stackoverflow.com/questions/479953/how-to-find-out-which-processes-are-swapping-in-linux –