简体   繁体   中英

Android Studio won't start on OpenSUSE (too many files open)

I haven't posted on StackOverflow in quite a while, so forgive me if I'm placing this in the wrong area, but here's the issue:

I recently downloaded Android Studio for my relatively freshly installed OpenSUSE system, have installed openjdk-devel, and whenever I try to start studio.sh the splash screen comes up, makes it about 70% of the way through loading, and then spams the console with:

 [ 7146] ERROR - j.util.io.ResizeableMappedFile - /home/user/.AndroidStudio1.3/system/caches/names.dat.len (Too many open files) java.io.FileNotFoundException: /home/user/.AndroidStudio1.3/system/caches/names.dat.len (Too many open files) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:221) at java.io.FileOutputStream.<init>(FileOutputStream.java:171) at com.intellij.util.io.ResizeableMappedFile$1.execute(ResizeableMappedFile.java:119) at com.intellij.util.io.ResizeableMappedFile$1.execute(ResizeableMappedFile.java:114) at com.intellij.openapi.util.io.FileUtilRt.doIOOperation(FileUtilRt.java:700) at com.intellij.util.io.ResizeableMappedFile.writeLength(ResizeableMappedFile.java:114) at com.intellij.util.io.ResizeableMappedFile.readLength(ResizeableMappedFile.java:164) at com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:55) at com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:82) at com.intellij.util.io.PersistentEnumeratorDelegate.<init>(PersistentEnumeratorDelegate.java:38) at com.intellij.util.io.PersistentStringEnumerator.<init>(PersistentStringEnumerator.java:53) at com.intellij.util.io.PersistentStringEnumerator.<init>(PersistentStringEnumerator.java:46) at com.intellij.util.io.PersistentStringEnumerator.<init>(PersistentStringEnumerator.java:32) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:244) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.connect(FSRecords.java:160) at com.intellij.openapi.vfs.newvfs.persistent.FSRecords.connect(FSRecords.java:518) at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.initComponent(PersistentFSImpl.java:89) at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:568) at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:610) at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:245) at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211) at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77) at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217) at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248) at com.intellij.util.pico.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:58) at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:550) at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:610) at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:245) at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211) at org.picocontainer.defaults.CollectionComponentParameter.getArrayInstance(CollectionComponentParameter.java:268) at org.picocontainer.defaults.CollectionComponentParameter.resolveInstance(CollectionComponentParameter.java:127) at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:116) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217) at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248) at com.intellij.util.pico.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:58) at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:550) at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:610) at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:245) at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211) at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponentFromContainer(ComponentManagerImpl.java:168) at com.intellij.openapi.application.impl.ApplicationImpl.getComponentFromContainer(ApplicationImpl.java:533) at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponent(ComponentManagerImpl.java:199) at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponent(ComponentManagerImpl.java:194) at com.intellij.openapi.vfs.VirtualFileManager.getInstance(VirtualFileManager.java:44) at com.intellij.openapi.vfs.LocalFileSystem$LocalFileSystemHolder.<clinit>(LocalFileSystem.java:40) at com.intellij.openapi.vfs.LocalFileSystem.getInstance(LocalFileSystem.java:44) at com.intellij.openapi.components.impl.stores.ApplicationStoreImpl$1.beforeFileBasedStorageCreate(ApplicationStoreImpl.java:85) at com.intellij.openapi.components.impl.stores.StateStorageManagerImpl.createFileStateStorage(StateStorageManagerImpl.java:212) at com.intellij.openapi.components.impl.stores.StateStorageManagerImpl.createStateStorage(StateStorageManagerImpl.java:185) at com.intellij.openapi.components.impl.stores.StateStorageManagerImpl.getStateStorage(StateStorageManagerImpl.java:102) at com.intellij.openapi.components.impl.stores.ComponentStoreImpl.initPersistentComponent(ComponentStoreImpl.java:315) at com.intellij.openapi.components.impl.stores.ComponentStoreImpl.initComponent(ComponentStoreImpl.java:75) at com.intellij.openapi.application.impl.ApplicationImpl.initializeComponent(ApplicationImpl.java:177) at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:566) at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:610) at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:245) at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211) at com.intellij.openapi.components.impl.ComponentManagerImpl.createComponent(ComponentManagerImpl.java:125) at com.intellij.openapi.application.impl.ApplicationImpl.createComponent(ApplicationImpl.java:354) at com.intellij.openapi.components.impl.ComponentManagerImpl.createComponents(ComponentManagerImpl.java:116) at com.intellij.openapi.components.impl.ComponentManagerImpl.init(ComponentManagerImpl.java:87) at com.intellij.openapi.components.impl.stores.ApplicationStoreImpl.load(ApplicationStoreImpl.java:101) at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:499) at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:481) at com.intellij.idea.IdeaApplication.run(IdeaApplication.java:170) at com.intellij.idea.MainImpl$1$1$1.run(MainImpl.java:52) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:745) at java.awt.EventQueue.access$300(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:706) at java.awt.EventQueue$3.run(EventQueue.java:704) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:715) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:362) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) [ 7150] ERROR - j.util.io.ResizeableMappedFile - Android Studio 1.3.1 Build #AI-141.2135290 [ 7151] ERROR - j.util.io.ResizeableMappedFile - JDK: 1.7.0_85 [ 7151] ERROR - j.util.io.ResizeableMappedFile - VM: OpenJDK Server VM [ 7151] ERROR - j.util.io.ResizeableMappedFile - Vendor: Oracle Corporation [ 7151] ERROR - j.util.io.ResizeableMappedFile - OS: Linux 

And I'm sort of at my wit's end here. I've tried linking to both openjdk as well as Oracle's latest JDK version. I've tried playing with the number of maximum open files (set in /etc/environment/limits.conf), but that doesn't seem to do anything despite the error indicating an abundance of open files. I've tried upgrading to openjdk1.8, downgrading to 1.7, reinstalling everything multiple times, but I just can't seem to launch the thing.

Is this a legitimate bug or critical user error? Any ideas about where I could look to maybe solve this?

Edit: /etc/environment/limits.conf

 # /etc/security/limits.conf # #Each line describes a limit for a user in the form: # #<domain> <type> <item> <value> # #Where: #<domain> can be: # - a user name # - a group name, with @group syntax # - the wildcard *, for default entry # - the wildcard %, can be also used with %group syntax, # for maxlogin limit # #<type> can have the two values: # - "soft" for enforcing the soft limits # - "hard" for enforcing hard limits # #<item> can be one of the following: # - core - limits the core file size (KB) # - data - max data size (KB) # - fsize - maximum filesize (KB) # - memlock - max locked-in-memory address space (KB) # - nofile - max number of open files # - rss - max resident set size (KB) # - stack - max stack size (KB) # - cpu - max CPU time (MIN) # - nproc - max number of processes # - as - address space limit (KB) # - maxlogins - max number of logins for this user # - maxsyslogins - max number of logins on the system # - priority - the priority to run user process with # - locks - max number of file locks the user can hold # - sigpending - max number of pending signals # - msgqueue - max memory used by POSIX message queues (bytes) # - nice - max nice priority allowed to raise to values: [-20, 19] # - rtprio - max realtime priority # #<domain> <type> <item> <value> # #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student - maxlogins 4 * hard nofile 65535 * soft nofile 65535 root soft nofile 65535 root hard nofile 65535 # End of file 

uname -a

 Linux susebart 3.16.7-21-desktop #1 SMP PREEMPT Tue Apr 14 07:11:37 UTC 2015 (93c1539) i686 i686 i386 GNU/Linux 

cat /proc/version

 Linux version 3.16.7-21-desktop (geeko@buildhost) (gcc version 4.8.3 20140627 [gcc-4_8-branch revision 212064] (SUSE Linux) ) #1 SMP PREEMPT Tue Apr 14 07:11:37 UTC 2015 (93c1539) 

Here's some mysterious output from the shell:

$ whoami
corey
$ ulimit -Hn
256
$ ulimit -Sn
256
$ su 
$ whoami
root
$ ulimit -Hn
65535
$ ulimit -Sn
65535
$ su corey
$ whoami
corey
$ ulimit -Hn
65535
$ ulimit -Sn
65535
$ exit
$ exit // getting back to login shell
$ whoami
corey
$ ulimit -Hn
256
$ ulimit -Sn
256

So it looks like the limits are changed properly when a new shell is opened (even without switching to root first in the case of the nested su above), but not when the machine is started or new shells are opened. I confirmed that by running su USERNAME ./studio.sh I'm able to start the program at last, so at least that exists as a workaround. Any clue what's going on with the shell instances though?

As for now that's what is going on:

$ whoami        //session 1 (256)
corey
$ ulimit -Hn
256
$ ulimit -Sn
256
$ su            //session 2 (65k)
$ whoami
root
$ ulimit -Hn
65535
$ ulimit -Sn
65535
$ su corey      //session 3 (65k)
$ whoami
corey
$ ulimit -Hn
65535
$ ulimit -Sn
65535
$ exit      //session 2(65k)
$ exit     // getting back to login shell: session 1 (256)
$ whoami
corey
$ ulimit -Hn
256
$ ulimit -Sn
256

The su command makes it possible to change a login session's owner (ie, the user who originally created that session by logging on to the system) without the owner having to first log out of that session. So, when you log out 2 times (from root and corey sessions) you return to the initial session in which your old limits seem to work. I have no idea how this could be if you rebooted system properly, so I just advice you to relogin (meaning explicitly log out and log in) under corey , I bet new values from limits.conf should finally apply.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM