2017-01-23 38 views
2

我在我的MySQL框中懷疑一些交換活動。我運行了「頂級」工具,它給了我51MB的交換空間。解釋頂部工具中的交換

但是,當我啓用頂部實用程序中的「Swap」列時,它顯示實際上有12g由mysqld使用的交換。

你能告訴我哪個是準確的信息嗎?是否有任何交換髮生?

enter image description here

回答

2

編輯:從我讀過的東西,在最高的輸出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」字段爲零,則表示沒問題。

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Tuning_and_Optimizing_Red_Hat_Enterprise_Linux_for_Oracle_9i_and_10g_Databases/sect-Oracle_9i_and_10g_Tuning_Guide-Swap_Space-Checking_Swap_Space_Size_and_Usage.html

+0

我跑在紅帽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

+0

「頂部輸出中的SWAP列顯示瞭如果它必須交換,它將使用多少交換」---這真的需要進一步闡述:例如,爲什麼12g不是84g? – zerkms

+0

另一種解釋:SWAP是一個虛假號碼,它只是'VIRT - RES'。如這裏所述:http://stackoverflow.com/questions/479953/how-to-find-out-which-processes-are-swapping-in-linux –