SSD Nodes Learn 🎉 VPS mulai $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-13

Cara Menjaga Model Ollama Tetap di Memori

Ollama membongkar model setelah 5 menit tanpa aktivitas. Atur keep_alive per permintaan atau lewat systemd agar permintaan berikutnya tidak menunggu pemuatan ulang.

Mengapa Ollama membongkar model setelah beberapa menit?

Ollama mempertahankan model di memori selama lima menit setelah permintaan terakhir, lalu membebaskannya. Permintaan berikutnya harus membaca bobot dari disk dan memetakannya kembali ke RAM atau VRAM. Akibatnya, proses berhenti sementara sebelum token pertama muncul. Karena itu, chat UI atau agen coding terasa cepat, kemudian tidak melakukan apa pun selama beberapa saat, lalu kembali terasa lambat pada pesan berikutnya. Tidak ada yang rusak. Timer idle telah kedaluwarsa.

Timer tersebut disebut keep_alive. Pengaturannya berlaku per model dan dimulai ulang setiap kali permintaan selesai. Model yang sedang menjawab permintaan tidak pernah dibongkar karena server hanya menghapus model yang tidak memiliki permintaan aktif. Per Agustus 2026, nilai default-nya adalah lima menit dan berlaku untuk setiap model yang dimuat server ini.

Ada dua tempat untuk mengatur keep_alive: pada permintaan individual atau sebagai default server. systemd drop-in membuat default server tetap berlaku setelah restart. Panduan ini mengasumsikan Ollama sudah berjalan sebagai service. Jika belum, mulai dengan menginstal Ollama pada VPS, lalu kembali ke sini.

Model apa yang sedang berada di memori, dan kapan masa berlakunya berakhir?

ollama ps
NAME        ID              SIZE      PROCESSOR    CONTEXT    UNTIL
qwen3:8b    500a1f067a9f    6.6 GB    100% GPU     4096       4 minutes from now

Output kosong berarti tidak ada model yang dimuat, sehingga permintaan berikutnya harus memuat model sepenuhnya. PROCESSOR menunjukkan lokasi penyimpanan bobot. 100% GPU dan 100% CPU merupakan kasus yang jelas. Pembagian seperti 25%/75% CPU/GPU berarti model tidak muat di VRAM, sehingga sebagian model berjalan pada prosesor dan proses pembuatan output menjadi lebih lambat.

UNTIL adalah hitung mundurnya, dan menampilkan waktu relatif seperti 4 minutes from now. Nilai Forever ditampilkan ketika model dimuat dengan keep_alive negatif. Nilai Stopping... ditampilkan selama periode singkat ketika server sedang membongkar model.

Kumpulan kolom dapat berubah antar-rilis, jadi baca header alih-alih menghitung field dalam skrip. Untuk otomatisasi, gunakan API:

curl -s http://localhost:11434/api/ps

Setiap entri memuat expires_at, timestamp absolut seperti 2026-08-09T14:38:31.83753Z, dan size_vram, yaitu bagian model tersebut yang berada di memori GPU. Nilai size_vram sebesar 0 berarti model berjalan pada CPU.

Biaya reload yang sebenarnya

Jangan menebaknya. Ollama melaporkan waktu pemuatan dalam setiap respons, sebagai load_duration, dalam nanodetik.

sudo apt install -y jq
ollama stop qwen3:8b
curl -s http://localhost:11434/api/generate -d '{"model": "qwen3:8b", "prompt": "hi", "stream": false}' | jq '{load_duration, total_duration}'
curl -s http://localhost:11434/api/generate -d '{"model": "qwen3:8b", "prompt": "hi", "stream": false}' | jq '{load_duration, total_duration}'

Pemanggilan pertama memuat model, sehingga load_duration bernilai besar. Bagi dengan 1000000000 untuk membacanya dalam detik. Pemanggilan kedua berjalan saat model masih berada di memori dan melaporkan angka yang jauh lebih kecil. Selisih antara kedua angka tersebut adalah biaya yang harus ditanggung setiap pengguna setelah timer kedaluwarsa. Selisih ini menjadi alasan utama untuk mengubah keep_alive. Untuk mengetahui kecepatan generasi sebelum dan sesudah jeda tersebut, lihat cara mengukur token per detik pada server Anda sendiri.

Mempertahankan model Ollama tetap dimuat di memori pada satu permintaan

Kirim keep_alive bersama permintaan. Pengaturan ini berlaku untuk model tersebut sejak permintaan selesai.

curl -s http://localhost:11434/api/chat -d '{
  "model": "qwen3:8b",
  "messages": [{"role": "user", "content": "hello"}],
  "keep_alive": "30m"
}'

Empat bentuk nilai dapat digunakan:

  • string durasi: "30m", "24h", "90s"
  • angka biasa yang dibaca sebagai detik: 3600
  • nilai negatif, -1 atau "-1m", yang berarti tidak ada batas waktu idle
  • 0, yang berarti model dibongkar segera setelah permintaan ini selesai

Nilai pada permintaan menggantikan default server dalam kedua arah. Hal ini penting: client yang mengirim keep_alive sendiri akan mengalahkan konfigurasi apa pun yang Anda tetapkan pada server.

Anda juga dapat memuat model tanpa menghasilkan apa pun. Kirim hanya nama model. Server akan memuatnya dan mengembalikan respons kosong dengan "done": true.

curl -s http://localhost:11434/api/generate -d '{"model": "qwen3:8b", "keep_alive": "30m"}'

Jalankan perintah tersebut setelah reboot atau setelah mengambil model baru, agar permintaan pengguna pertama yang sebenarnya tidak perlu menunggu proses pemuatan. CLI melakukan hal yang sama dengan sebuah flag:

ollama run --keepalive 30m qwen3:8b "hello"

Pertahankan model tetap dimuat secara default dengan OLLAMA_KEEP_ALIVE

Server membaca OLLAMA_KEEP_ALIVE saat startup dan menggunakannya untuk setiap model yang tidak memiliki nilai sendiri. Nilai ini menggunakan format yang sama dengan field request, sehingga 30m, 3600, dan -1 dapat digunakan.

Hal yang perlu diperhatikan adalah environment tempat variabel tersebut harus ditetapkan. Menjalankan export OLLAMA_KEEP_ALIVE=30m dalam sesi SSH Anda tidak berpengaruh karena instalasi paket menjalankan server sebagai service systemd dengan user dan environment-nya sendiri. Shell login Anda tidak terhubung dengan service tersebut. Ini adalah alasan paling umum mengapa pengaturan terlihat seperti diabaikan.

Jadikan pengaturan tetap setelah restart dengan drop-in systemd

sudo systemctl edit ollama.service

Editor terbuka dengan dua penanda komentar. Ketik di antara keduanya: systemd mengabaikan apa pun yang ditulis di bawah penanda kedua.

[Service]
Environment="OLLAMA_KEEP_ALIVE=30m"

Penyimpanan menulis /etc/systemd/system/ollama.service.d/override.conf. Ini adalah drop-in, bukan pengeditan unit yang disediakan paket, sehingga pembaruan paket Ollama yang mengganti ollama.service tidak mengubah pengaturan Anda. Jika drop-in dan unit file masih baru bagi Anda, panduan service dan timer systemd menjelaskan mekanismenya.

sudo systemctl daemon-reload
sudo systemctl restart ollama
systemctl show ollama --property=Environment

Perintah terakhir menampilkan environment yang benar-benar akan digunakan service. Jika OLLAMA_KEEP_ALIVE=30m tidak ada pada baris tersebut, drop-in tidak diterapkan. Penyebabnya hampir selalu header [Service] yang tidak ada atau baris yang ditulis di bawah penanda. Restart itu sendiri menghapus semua model yang dimuat, sehingga request berikutnya akan memuat model dari awal. Lakukan pemanasan dengan pemanggilan preload di atas.

Biaya mempertahankan model tetap aktif

Kolom SIZE dalam ollama ps menunjukkan memori yang digunakan selama seluruh periode idle, bukan hanya selama permintaan berlangsung. Model 8B dengan kuantisasi 4-bit menggunakan sekitar 5 hingga 6 GB. Model 27B memerlukan pertimbangan yang berbeda, dan perhitungan memori untuk menjalankannya pada VPS yang hanya menggunakan CPU perlu ditinjau sebelum Anda memutuskan untuk mempertahankannya tetap aktif. Jika keep_alive diatur ke -1, berarti Anda menetapkan bahwa model tersebut harus selalu didahulukan daripada semua hal lain pada server. Pada VPS kecil, ini secara langsung mengurangi sumber daya untuk database, aplikasi web, dan tugas build Anda.

Pantau angka aktual, bukan hanya mengandalkan perkiraan. Jalankan perintah ini saat model telah dimuat, lalu jalankan lagi setelah ollama stop:

free -h

Kolom available menunjukkan memori yang masih dapat diberikan oleh kernel kepada proses baru. Pada server dengan GPU NVIDIA, nvidia-smi menunjukkan kondisi yang sama pada VRAM. Jika server kehabisan memori, kernel akan menghentikan suatu proses untuk memulihkan sumber daya:

sudo dmesg -T | grep -i "out of memory"

Baris yang menyebut ollama berarti model server menjadi proses yang dihentikan. Baris yang menyebut database Anda berarti model tetap berjalan dan sesuatu yang penting bagi Anda menjadi korban. Kedua hasil tersebut berasal dari keputusan yang sama: menetapkan periode keep-alive yang panjang pada server tanpa cadangan sumber daya.

Ada dua biaya yang mudah terlewatkan. Panjang context yang lebih besar mencadangkan KV cache (key value cache, yaitu status perhatian per token yang dipertahankan model selama proses pembuatan), dan cache tersebut menjadi bagian dari ukuran resident. Nilai OLLAMA_NUM_PARALLEL di atas 1 mencadangkan cache tersebut satu kali untuk setiap slot paralel. Jika Anda berencana melayani beberapa orang dari satu model, sediakan memori berdasarkan jumlah slot, bukan hanya berdasarkan bobot model.

Nilai default yang wajar: satu model pada server dengan cadangan sumber daya dapat menggunakan -1. Server bersama sebaiknya menggunakan window yang mencakup jeda antarpermintaan Anda, misalnya 30m, agar memori tersedia kembali setelah Anda selesai bekerja.

Melepas model segera

ollama stop qwen3:8b

Perintah ini tidak menghasilkan output, dan model tersebut menghilang dari ollama ps. Nama model yang tidak dimuat menghasilkan couldn't find model "qwen3:8b" to stop. Bentuk API-nya adalah request tanpa prompt dengan keep_alive yang diatur ke 0:

curl -s http://localhost:11434/api/chat -d '{"model": "qwen3:8b", "messages": [], "keep_alive": 0}'

Responsnya berisi "done_reason": "unload". Gunakan cara ini sebagai pengganti restart service. systemctl restart ollama juga membebaskan memori, tetapi menghapus semua model lain yang sedang dimuat dan menghentikan setiap request yang sedang berjalan.

Menjalankan lebih dari satu model pada satu server

OLLAMA_MAX_LOADED_MODELS membatasi jumlah model yang tetap dimuat secara bersamaan. Per Agustus 2026, nilai defaultnya adalah tiga model per GPU, atau tiga model pada mesin yang hanya menggunakan CPU. Batas ini menghitung jumlah model, sedangkan memori adalah batas sebenarnya. Karena itu, model besar kedua dapat ditolak jauh sebelum jumlahnya mencapai tiga.

Jika model baru diminta dan memori yang tersedia tidak mencukupi, scheduler membongkar salah satu model yang sedang dimuat untuk menyediakan ruang. Scheduler lebih memilih model yang tidak memiliki permintaan aktif. Scheduler juga dapat mengeluarkan model yang waktu tunggunya belum berakhir, termasuk model yang dimuat dengan -1. Jadi, nilai negatif pada keep_alive berarti tidak ada batas waktu idle. Pengaturan ini tidak mengunci bobot model agar tidak dapat digunakan untuk memenuhi permintaan model lain.

Keputusan tersebut dicatat pada level debug. Tambahkan baris Environment="OLLAMA_DEBUG=1" kedua ke drop-in yang sama, mulai ulang service, lalu pantau log:

sudo journalctl -u ollama -f

Baris tentang pembongkaran runner untuk menyediakan ruang, yang muncul di dekat permintaan yang memicunya, menunjukkan bahwa kedua model tersebut tidak dapat dimuat bersamaan pada mesin ini. Solusinya adalah mengurangi jumlah model pada server ini, atau menetapkan jendela waktu yang panjang untuk model yang harus merespons dengan cepat dan menggunakan 0 untuk model yang jarang dipanggil.

Panduan yang tetap berlaku setelah rilis berikutnya

Ollama sering merilis pembaruan dan nilai default-nya dapat berubah. Karena itu, periksa build yang sedang Anda gunakan, bukan mengandalkan hafalan angka:

ollama --version
ollama serve --help

ollama serve --help mencantumkan variabel lingkungan yang benar-benar dibaca oleh build tersebut, termasuk OLLAMA_KEEP_ALIVE. Dua aturan berlaku di berbagai rilis dan aman dijadikan dasar. Nilai dalam request mengesampingkan default server. Selain itu, ollama ps menunjukkan apa yang benar-benar dimuat, terlepas dari isi file konfigurasi.

Jika editor atau agent mengendalikan server Anda, periksa data yang dikirim klien tersebut sebelum menyalahkan server. Menghubungkan coding agent ke server Ollama sendiri menjelaskan lokasi pengaturan request tersebut.

FAQ

Mengapa Ollama membongkar model saya setelah 5 menit?

Lima menit adalah nilai default keep_alive, yaitu pengatur waktu idle yang dijalankan Ollama setelah sebuah permintaan selesai. Saat waktunya habis, server membebaskan bobot model. Permintaan berikutnya harus memuatnya kembali dari disk, dan proses pemuatan ulang itulah yang menyebabkan jeda. Tingkatkan nilainya untuk satu permintaan dengan mengirimkan "keep_alive": "30m" dalam isi JSON, atau untuk seluruh server dengan variabel lingkungan OLLAMA_KEEP_ALIVE.

Bagaimana cara mempertahankan model Ollama tetap dimuat di memori secara permanen?

Gunakan nilai negatif: "keep_alive": -1 pada permintaan, atau OLLAMA_KEEP_ALIVE=-1 untuk server. Setelah itu, ollama ps menampilkan Forever pada kolom UNTIL. Pengaturan ini hanya menghapus pengatur waktu idle. Jika model lain diminta dan memori tidak mencukupi, scheduler tetap membongkar model ini untuk menyediakan ruang.

Mengapa OLLAMA_KEEP_ALIVE diabaikan?

Periksa lokasi tempat Anda menetapkannya. Jalankan systemctl show ollama --property=Environment. Jika variabel tersebut tidak ada dalam output, server tidak pernah menerimanya karena variabel yang diekspor di shell Anda tidak diteruskan ke service systemd. Tetapkan variabel tersebut dengan sudo systemctl edit ollama.service, lalu jalankan sudo systemctl daemon-reload dan sudo systemctl restart ollama. Penyebab lainnya adalah client yang mengirimkan keep_alive sendiri dalam permintaan, sehingga menimpa nilai default server.

Bagaimana cara membebaskan memori tanpa me-restart Ollama?

ollama stop qwen3:8b segera membongkar model tersebut dan membiarkan server serta semua model lain yang telah dimuat tetap berjalan. Melalui API, kirim permintaan tanpa prompt dan sertakan "keep_alive": 0. Responsnya akan berisi "done_reason": "unload". Konfirmasikan dengan ollama ps. Model tersebut seharusnya tidak lagi tercantum.