Do you have WAL Archiving enabled (archive_mode)? If yes, then that might be the cause of this WAL files buildup. When archiving is enabled, the WAL files are deleted from pg_xlog directory only after they have been successfully archived via the command specified by "archive_command".
If archive_command starts to fail or the number of WAL files being archived per minute is less (due to IO load, network, compression etc) than the number of new WAL files being generated per minute to pg_xlog then the WAL files will start to increase irrespective of the value set for wal_keep_segments.
Regards
Yaser