~/tools / 在自己的伺服器上執行本機 LLM / Ollama Log Reader

Ollama Log Reader — 讀取 Ollama 伺服器記錄:記憶體、GPU 層數、上下文、速度、警告

貼上 Ollama 的伺服器記錄(來自 server.log、journalctl 或 docker logs),工具會挑出重點:每次載入模型用了多少記憶體、用在哪裡(權重、KV cache、運算緩衝區,依 CPU 或 GPU 分開),有多少層放到了 GPU、上下文長度、請求與其狀態、提示詞與生成的速度,以及每一則警告與說明。它會顯示提示詞何時為了配合上下文而被截斷、模型何時放不進記憶體,以及 Ollama 何時重新載入了模型。資料不會離開你的瀏覽器。

在哪裡找到記錄

來自 Ollama 的疑難排解頁面。在 Windows 上,最新的記錄是該資料夾中的 server.log。

# macOS
cat ~/.ollama/logs/server.log

# Linux (systemd)
journalctl -u ollama --no-pager

# Docker
docker logs <container-name>

# Windows
explorer %LOCALAPPDATA%\Ollama

已讀取 77 行中的 76 行。

  • 第 23 行上下文為 4096 個 token,比模型支援的 32768 還短。更長的輸入需要更大的 num_ctx 或 OLLAMA_CONTEXT_LENGTH,以及更多給 KV cache 的記憶體。
  • 第 43 行上下文為 256 個 token,比模型支援的 32768 還短。更長的輸入需要更大的 num_ctx 或 OLLAMA_CONTEXT_LENGTH,以及更多給 KV cache 的記憶體。
  • 第 49 行提示詞有 633 個 token,放不進上下文。Ollama 保留了最前面的 4 個 token 與提示詞的結尾,捨棄其餘部分,剩下 130 個 token。請提高 num_ctx、縮短提示詞,或傳送 truncate 設為 false,改為取得錯誤。
  • 第 53 行一個 633 個 token 的請求放不進 256 個 token 的上下文而被拒絕(truncate 為 false 時會發生這種情況)。請提高 num_ctx 或縮短輸入。
  • 第 55 行Ollama 停止了 llama-server,並立即重新啟動,以便用其他設定(例如另一個 num_ctx)載入模型。這不是當機。
  • 第 58 行num_ctx 65536 比模型訓練時的上下文還長,所以 Ollama 使用了 32768。
  • 失敗的請求:400 POST /api/chat, 404 POST /api/chat

伺服器

版本
0.40.11
位址
[::]:11434
裝置
cpu cpu (1.9 GiB / 1.9 GiB)
預設上下文長度
4096

設定(環境變數)

OLLAMA_HOST
http://0.0.0.0:11434
OLLAMA_CONTEXT_LENGTH
0 (0 = 預設值)
OLLAMA_NUM_PARALLEL
1
OLLAMA_MAX_LOADED_MODELS
0 (0 = 預設值)
OLLAMA_KEEP_ALIVE
5m0s
OLLAMA_FLASH_ATTENTION
false

模型載入

2026-11-07T08:32:08.625Z 的第 1 次載入 第 14 行

模型
Qwen2.5 0.5B Instruct · Q4_K - Medium · 373.71 MiB (6.35 BPW) · sha256-c5396e06af29
上下文長度
4096 (訓練長度為 32768)
平行請求數
1
權重
512 MiB
KV cache
48.0 MiB (f16)
運算緩衝區
41.3 MiB
總計
601 MiB
依裝置
CPU 393 MiB, CPU_REPACK 208 MiB
系統記憶體
1946 MiB 中有 1638 MiB 可用,swap 可用 777 MiB
啟動時間
1.27 秒

2026-11-07T08:32:10.384Z 的第 2 次載入 第 34 行

模型
Qwen2.5 0.5B Instruct · Q4_K - Medium · 373.71 MiB (6.35 BPW) · sha256-c5396e06af29
上下文長度
256 (訓練長度為 32768)
平行請求數
1
權重
512 MiB
KV cache
3.0 MiB (f16)
運算緩衝區
18.8 MiB
總計
533 MiB
依裝置
CPU 325 MiB, CPU_REPACK 208 MiB
系統記憶體
1946 MiB 中有 1638 MiB 可用,swap 可用 763 MiB
啟動時間
1.02 秒

2026-11-07T08:32:12.223Z 的第 3 次載入 第 59 行

模型
Qwen2.5 0.5B Instruct · Q4_K - Medium · 373.71 MiB (6.35 BPW) · sha256-c5396e06af29
上下文長度
32768 (訓練長度為 32768)
平行請求數
1
權重
512 MiB
KV cache
384 MiB (f16)
運算緩衝區
139 MiB
總計
1034 MiB
依裝置
CPU 826 MiB, CPU_REPACK 208 MiB
系統記憶體
1946 MiB 中有 1638 MiB 可用,swap 可用 764 MiB
啟動時間
1.02 秒

llama-server 回報的速度

已處理的提示詞 token提示詞速度已生成的 token生成速度
35217.5 token/秒759.9 token/秒
130227.3 token/秒1194.8 token/秒
30202.7 token/秒562.7 token/秒

請求

時間狀態耗時請求
2026/11/07 - 08:31:422000.007 秒GET /api/version
2026/11/07 - 08:32:0020017.49 秒POST /api/pull
2026/11/07 - 08:32:002000.040 秒GET /api/tags
2026/11/07 - 08:32:102001.62 秒POST /api/chat
2026/11/07 - 08:32:122001.89 秒POST /api/chat
2026/11/07 - 08:32:124000.005 秒POST /api/chat
2026/11/07 - 08:32:132001.31 秒POST /api/chat
2026/11/07 - 08:32:134040.002 秒POST /api/chat

當提示詞放不下時,Ollama 會把它截斷為 num_ctx − max((num_ctx − num_keep) ÷ 2, 1) 個 token:約為上下文的一半,以便留下空間給回答。速度表中的提示詞 token 只計算不在快取中的 token。

llama-server 在計算生成速度時不計入第一個生成的 token,所以它的值會比 API 回應中 eval_count 除以 eval_duration 的值稍低一些。

記錄的格式會隨版本而變。本工具依照 Ollama v0.40.15 與它所用的 llama.cpp 版本,並略過不認得的行。

訊息來自 Ollama 原始碼(v0.40.15)與 llama.cpp,並於 2026-11-07 以 Ollama 0.40.11 在 macOS 與 Linux 上的真實記錄檢查過。 Ollama: Troubleshooting

一切都在你的瀏覽器中完成。本工具不會連線到任何地方。記錄可能包含檔案路徑、IP 位址與模型名稱。

當 Ollama 變慢、回答忽略長提示詞的開頭,或請求以 500 錯誤失敗時,原因通常就在伺服器記錄裡。記錄中混有 Ollama 自己的行(time=… level=… msg=…)、每個 HTTP 請求一行([GIN] …),以及 llama-server 的輸出,也就是 Ollama 為了載入每個 GGUF 模型而執行的 llama.cpp 程式。本工具會讀取這三種內容。每次載入模型時,它會顯示上下文長度(-c)、平行請求數(-np)、模型的檔案類型與大小、訓練時的上下文長度、有多少層被卸載到 GPU,以及權重、KV cache 與運算緩衝區各自使用的記憶體,並依裝置分開。它也會列出請求的狀態與耗時,以及 llama-server 在每個請求之後印出的提示詞與生成速度。接著它根據 Ollama 原始碼(v0.40.15)中的訊息,說明哪裡出了問題。當提示詞放不進上下文時,Ollama 會保留最前面的 num_keep 個 token 與提示詞的結尾,捨棄中間的部分,直到提示詞約佔上下文的一半:在我們的測試中,num_ctx 為 256 時,633 個 token 的提示詞被截斷為 130 個 token。將 truncate 設為 false 時,同一個請求被以 400 錯誤拒絕。高於模型訓練長度的 num_ctx 會被降到該長度。當模型放不進記憶體時,載入會失敗:在我們的測試中,在記憶體 1.9 GiB、沒有 GPU 的 Linux 上,qwen2.5:7b 光是權重就需要 4,460 MiB,llama-server 被以 signal: killed 停止,請求回傳 500。若有一行說 llama-server 已終止,隨即又重新啟動,代表 Ollama 正以其他設定重新載入模型,而不是當機。記錄的格式會隨版本而變;工具會讀取它認得的行,並略過其餘的行。我們用 Ollama 0.40.11 在 macOS(Apple M1)上,以及在沒有 GPU 的 Docker 內 Linux 上的真實記錄做過檢查。

這個工具的核心邏輯以 MIT 授權開放原始碼。 github.com/seigo5555/toolkitbox-lib/src/ollama-log.ts

使用情境

  • 找出長提示詞看似被忽略的原因,或請求以 400 或 500 失敗的原因
  • 查看模型實際用了多少記憶體,以及它是在 GPU、CPU 還是兩者上執行
  • 在買更大的 VPS 之前,確認伺服器使用了哪個上下文長度與設定

使用方法

  1. 取得記錄:在 macOS 上用 cat ~/.ollama/logs/server.log,在 Linux 上用 journalctl -u ollama --no-pager,或用 docker logs 加上容器名稱。
  2. 貼上它。以 journalctl 或 docker 時間戳記開頭的行也會被讀取。
  3. 先看警告,再看模型載入、速度與請求。

FAQ

為什麼我的模型忽略長提示詞的開頭?

如果記錄中有「truncating input prompt」這一行,代表提示詞放不進上下文。Ollama 保留了最前面的 num_keep 個 token 與結尾,捨棄中間,直到提示詞約佔上下文的一半。請提高 num_ctx(或 OLLAMA_CONTEXT_LENGTH)、縮短提示詞,或傳送 truncate 設為 false,這樣 Ollama 會回傳錯誤,而不是截斷。

「signal: killed」是什麼意思?

llama-server 被外部停止了。在我們於 Linux 上的測試中,這發生在載入一個放不進記憶體的模型時,請求回傳了 500。如果兩秒內接著出現新的「starting llama-server」行,代表 Ollama 自己停止了舊的程序,以便用其他設定重新載入模型。

為什麼記錄中的生成速度比 eval_count 除以 eval_duration 還低?

llama-server 不計入第一個生成的 token,因為它來自提示詞處理的最後一步,所以它是除以少一個的 token 數。在我們的測試中,675.82 ms 內的 7 個 token 被回報為每秒 8.88 個 token,而 7 除以同樣的時間是 10.4。

我要怎麼知道模型是否在 GPU 上執行?

請看該次模型載入的「放到 GPU 的層數」。所有層都在 GPU 上,代表模型完全在那裡執行;只有部分層在 GPU 上,代表其餘的在 CPU 上執行。模型載入期間,ollama ps 的 PROCESSOR 欄位會顯示同樣的分配。

為什麼有些行沒有被讀取?

本工具會讀取 Ollama 自己的行、請求行,以及與記憶體、上下文和速度有關的 llama-server 行。其他行,例如模型中繼資料的清單,會被略過。格式會隨版本而變,所以來自更舊或更新版本的行可能無法辨識。

我的記錄會被傳送到別處嗎?

不會。記錄是在你的瀏覽器中讀取的。記錄可能包含檔案路徑、IP 位址與你的模型名稱,所以貼到其他地方時請小心。

相關文章

相關工具