Используйте параметр командной строки -XX:MaxPermSize=128m
для JVM Sun (очевидно, заменяющий 128 для любого размера, в котором Вы нуждаетесь).
Я просто хотел добавить (и вы, возможно, уже знаете), что хранилище сеансов PHP по умолчанию (которое использует файлы) блокирует файлы сеансов. Очевидно, что использование файлов для сеансов имеет множество недостатков, и, вероятно, поэтому вы ищете решение для базы данных.
Проверьте с помощью mysql_affected_rows (), была ли получена блокировка. Если получилось - приступайте. Если нет - повторяйте операцию каждые 0,5 секунды. Если в течение 40 секунд блокировка все еще не получена, генерируйте исключение.
Я вижу проблему в блокировке выполнения сценария с этой постоянной проверкой блокировки. Вы предлагаете запускать PHP в течение 40 секунд в поисках этой блокировки каждый раз при инициализации сеанса (если я правильно это понимаю).
Если у вас кластерная среда, я настоятельно рекомендую memcached . Он поддерживает отношения сервер / клиент, поэтому все кластерные экземпляры могут подчиняться серверу memcached. У него нет проблем с блокировкой, которых вы боитесь, и он работает достаточно быстро. Цитата с их страницы:
Независимо от того, какую базу данных вы используете (MS-SQL, Oracle, Postgres, MySQL-InnoDB и т. Д.), Реализация свойств ACID в СУБД требует больших затрат, особенно когда задействованы диски. , что означает, что запросы будут заблокированы. Для баз данных, не совместимых с ACID (например, MySQL-MyISAM), таких накладных расходов не существует, но потоки чтения блокируются в потоках записи. memcached никогда не блокируется.
В противном случае, если вы все еще придерживаетесь хранилища сеансов РСУБД (и беспокоитесь, что блокировка станет проблемой), вы можете попробовать какой-то сегмент на основе липкого идентификатора сеанса (хватаясь за соломинки здесь.