Yes, this sounds very normal. Linux keeps file data it has read in memory. Chances are that it needs to be read again soon, and when it is still in memory, it will be way faster.
So Linux uses almost all memory for IO-caching. When more memory is requested by programs, it will be made available to the programs, and less room will be used for caching and buffering of IO.
The program "free" gives information about how much memory is free and how much is used for caching and buffering.
Code:
bash$ free -m
total used free shared buffers cached
Mem: 3289 3160 128 0 111 2399
-/+ buffers/cache: 649 2639
Swap: 9538 0 9538
The -m option makes it show number in megabytes.
The number in
blue is the one you'd want to watch to see it memory is being eaten by some program. It indicates free memory, counting cache and buffers as "free".