This is usually caused by a runaway process or group of processes. For example a cron job that runs a program but that program never exiting will eventually either run the system out of memory, out of processes, or out of files.
lsof(8), fuser(1) etc can be used to try and determine what is using the files and killing the offending processes. Also, you can up the system wide number of files by putting a larger number into /proc/sys/fs/file-max, you will probably have to update /proc/sys/fs/inode-max too (maximum number of open inodes). See ProcessNotes.