VIRT это размер адресного пространства процесса (ну как-то так), а не потребляемая память. Реально выделенная память ближе к цифре, которая написана в RSS. Потому 350 мб вас не дложны беспокоить, но если вы хотите узнать причину, то надо делать pmap процессу mysql — он покажет, куда используется память.
Кстати, куда вы прописывали ulimit? Я подозреваю, вы просто не туда ее вписали, если она не работает.
Также, советую вам уходить с OpenVZ хостингов. Они учитывают не реальное потребление памяти, а этот самый VIRT (который гораздо больше), и хостеры за счет этого продают больше памяти, чем есть в сервере (насколько больше — зависит только от жадности хостера). А клиент, соответственно получает меньше, чем он бы получил от Xen или реальной машины аналогичной конфигурации. Вам придется постоянно мучаться с оптимизацией софта (так как многие программы выделяют адресное пространство, не считая его, оно же виртуальное) и придется разбираться с падениями программ из-за перерасхода памяти. Оно вам нужно?