繁体   English   中英

Android Studio无法在OpenSUSE上启动(打开的文件太多)

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

我已经有一段时间没有在StackOverflow上发布文章了,所以请原谅我将其放在错误的位置,但这是问题所在:

我最近为相对较新安装的OpenSUSE系统下载了Android Studio,已经安装了openjdk-devel,并且每当我尝试启动studio.sh时,都会显示启动屏幕,并在整个加载过程中出现70%的错误,然后向控制台发送垃圾邮件有:

 [ 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 

我有点机智。 我尝试链接到openjdk和Oracle的最新JDK版本。 我试过玩最大打开文件数(在/etc/environment/limits.conf中设置),但是尽管错误表明打开文件过多,但似乎没有任何作用。 我曾尝试升级到openjdk1.8,降级到1.7,多次重新安装所有内容,但我似乎无法启动它。

这是合法错误还是严重的用户错误? 关于我可以寻找解决方案的任何想法?

编辑:/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 

优名

 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) 

这是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

因此,看起来好像在打开新的外壳程序时正确更改了限制(对于上面的嵌套su而言,即使不先切换到root),但在启动计算机或打开新的外壳程序时也不会更改。 我确认通过运行su USERNAME ./studio.sh终于可以启动该程序了,因此至少可以解决该问题。 有什么线索可说,shell实例是怎么回事?

至于现在,这是怎么回事:

$ 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

su命令使更改登录会话的所有者(即最初通过登录系统创建该会话的用户)成为可能, 所有者不必先注销该会话。 因此,当您注销两次(从root和corey会话)时,您将返回到原来的限制似乎起作用的初始会话。 我不知道这怎么会是,如果你重新启动系统正常,所以我建议你重新登录下(意味着明确注销和登录) corey ,我敢打赌,从新值limits.conf应最后申请。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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