Почему ЭКГ не показывает мою выделенную память?
Посмотрев EKG за 24 дня Hackage, я попытался использовать его в одной из своих программ, но он не показывал распределение памяти.
Поэтому я попробовал еще раз с примером программы, которая просто высасывает память:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import System.Remote.Monitoring (forkServer)
import Control.Applicative ((<$>))
import Control.Monad (foldM, forM_)
import Control.Monad.Primitive (PrimMonad, PrimState)
import Data.Vector.Mutable (MVector, replicate, read, write, length)
import Prelude hiding (read, length, replicate)
import Text.Printf
accumBy :: (Functor m, PrimMonad m) => (a -> a -> a) -> MVector (PrimState m) a -> m a
accumBy f v = do
a <- read v 0
foldM (\a i -> do
a' <- f a <$> read v i
write v i a'
return a'
) a [1 .. length v - 1]
main :: IO ()
main = do
forkServer "localhost" 8000
forM_ [1..] $ \n -> do
v <- replicate (n*1024) (n :: Int)
accumBy (+) v >>= printf "%08x\n"
Программа работает нормально
% ghc --make Temp.hs -rtsopts && ./Temp +RTS -K32mM -RTS
00000400
00001000
00002400
...
Но ЭКГ, похоже, совсем не определяет использование моей памяти
Что я делаю неправильно?
1 ответ
Решение
Вам нужно использовать -T
или же -t
или же -S
или же -s
Опция RTS для сбора статистики, например:
ghc --make Temp.hs -rtsopts && ./Temp +RTS -T -K32mM -RTS