2015-08-16 29 views
2

我在一段時間內沒有在StackOverflow上發佈,所以請原諒我,如果我把它放在錯誤的區域,但這裏是問題:Android Studio不會在OpenSUSE上啓動(打開的文件太多)

我最近下載了Android Studio,用於我相對新鮮安裝的OpenSUSE系統,安裝了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) 
 
\t at java.io.FileOutputStream.open(Native Method) 
 
\t at java.io.FileOutputStream.<init>(FileOutputStream.java:221) 
 
\t at java.io.FileOutputStream.<init>(FileOutputStream.java:171) 
 
\t at com.intellij.util.io.ResizeableMappedFile$1.execute(ResizeableMappedFile.java:119) 
 
\t at com.intellij.util.io.ResizeableMappedFile$1.execute(ResizeableMappedFile.java:114) 
 
\t at com.intellij.openapi.util.io.FileUtilRt.doIOOperation(FileUtilRt.java:700) 
 
\t at com.intellij.util.io.ResizeableMappedFile.writeLength(ResizeableMappedFile.java:114) 
 
\t at com.intellij.util.io.ResizeableMappedFile.readLength(ResizeableMappedFile.java:164) 
 
\t at com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:55) 
 
\t at com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:82) 
 
\t at com.intellij.util.io.PersistentEnumeratorDelegate.<init>(PersistentEnumeratorDelegate.java:38) 
 
\t at com.intellij.util.io.PersistentStringEnumerator.<init>(PersistentStringEnumerator.java:53) 
 
\t at com.intellij.util.io.PersistentStringEnumerator.<init>(PersistentStringEnumerator.java:46) 
 
\t at com.intellij.util.io.PersistentStringEnumerator.<init>(PersistentStringEnumerator.java:32) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:244) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.init(FSRecords.java:319) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.connect(FSRecords.java:160) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.FSRecords.connect(FSRecords.java:518) 
 
\t at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.initComponent(PersistentFSImpl.java:89) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:568) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:610) 
 
\t at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:245) 
 
\t at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211) 
 
\t at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77) 
 
\t at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114) 
 
\t at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257) 
 
\t at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217) 
 
\t at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53) 
 
\t at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248) 
 
\t at com.intellij.util.pico.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:58) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:550) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:610) 
 
\t at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:245) 
 
\t at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211) 
 
\t at org.picocontainer.defaults.CollectionComponentParameter.getArrayInstance(CollectionComponentParameter.java:268) 
 
\t at org.picocontainer.defaults.CollectionComponentParameter.resolveInstance(CollectionComponentParameter.java:127) 
 
\t at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:116) 
 
\t at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257) 
 
\t at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217) 
 
\t at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53) 
 
\t at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248) 
 
\t at com.intellij.util.pico.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:58) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:550) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:610) 
 
\t at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:245) 
 
\t at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponentFromContainer(ComponentManagerImpl.java:168) 
 
\t at com.intellij.openapi.application.impl.ApplicationImpl.getComponentFromContainer(ApplicationImpl.java:533) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponent(ComponentManagerImpl.java:199) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponent(ComponentManagerImpl.java:194) 
 
\t at com.intellij.openapi.vfs.VirtualFileManager.getInstance(VirtualFileManager.java:44) 
 
\t at com.intellij.openapi.vfs.LocalFileSystem$LocalFileSystemHolder.<clinit>(LocalFileSystem.java:40) 
 
\t at com.intellij.openapi.vfs.LocalFileSystem.getInstance(LocalFileSystem.java:44) 
 
\t at com.intellij.openapi.components.impl.stores.ApplicationStoreImpl$1.beforeFileBasedStorageCreate(ApplicationStoreImpl.java:85) 
 
\t at com.intellij.openapi.components.impl.stores.StateStorageManagerImpl.createFileStateStorage(StateStorageManagerImpl.java:212) 
 
\t at com.intellij.openapi.components.impl.stores.StateStorageManagerImpl.createStateStorage(StateStorageManagerImpl.java:185) 
 
\t at com.intellij.openapi.components.impl.stores.StateStorageManagerImpl.getStateStorage(StateStorageManagerImpl.java:102) 
 
\t at com.intellij.openapi.components.impl.stores.ComponentStoreImpl.initPersistentComponent(ComponentStoreImpl.java:315) 
 
\t at com.intellij.openapi.components.impl.stores.ComponentStoreImpl.initComponent(ComponentStoreImpl.java:75) 
 
\t at com.intellij.openapi.application.impl.ApplicationImpl.initializeComponent(ApplicationImpl.java:177) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:566) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:610) 
 
\t at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:245) 
 
\t at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl.createComponent(ComponentManagerImpl.java:125) 
 
\t at com.intellij.openapi.application.impl.ApplicationImpl.createComponent(ApplicationImpl.java:354) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl.createComponents(ComponentManagerImpl.java:116) 
 
\t at com.intellij.openapi.components.impl.ComponentManagerImpl.init(ComponentManagerImpl.java:87) 
 
\t at com.intellij.openapi.components.impl.stores.ApplicationStoreImpl.load(ApplicationStoreImpl.java:101) 
 
\t at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:499) 
 
\t at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:481) 
 
\t at com.intellij.idea.IdeaApplication.run(IdeaApplication.java:170) 
 
\t at com.intellij.idea.MainImpl$1$1$1.run(MainImpl.java:52) 
 
\t at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312) 
 
\t at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:745) 
 
\t at java.awt.EventQueue.access$300(EventQueue.java:103) 
 
\t at java.awt.EventQueue$3.run(EventQueue.java:706) 
 
\t at java.awt.EventQueue$3.run(EventQueue.java:704) 
 
\t at java.security.AccessController.doPrivileged(Native Method) 
 
\t at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
 
\t at java.awt.EventQueue.dispatchEvent(EventQueue.java:715) 
 
\t at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:362) 
 
\t at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
 
\t at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
 
\t at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
 
\t at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
 
\t at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
 
\t 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

0:與控制檯

而我在我的智慧結束在這裏。我試過鏈接到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

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 /版本

Linux version 3.16.7-21-desktop ([email protected]) (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)

下面是從外殼一些輸出神祕:

$ 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),但不是當機器啓動或新的shell被打開時。我確認通過運行su USERNAME ./studio.sh我能夠最終啓動程序,所以至少存在這種解決方法。任何有關shell實例的線索都會發生什麼?

+0

根據[this](http://unix.stackexchange.com/questions/56427/how-to-modify-ulimit-for-open-files-on-suse-linux-enterprise-server-10-4 -permane),[this](https://rtcamp.com/tutorials/linux/increase-open-files-limit/)和[this](http://www.unix.com/suse/60719-setting- max-open-files-value.html])你應該在一個地方調整這些設置。你有沒有嘗試重新啓動系統? 「ulimit -Hn」目前顯示的是什麼,您的舊限制或新限制? – solar

+0

我修改了額外的文件,並根據鏈接指令重新啓動,但ulimit -Hn/-Sn始終顯示256.即使運行sudo bash -c「ulimit -n 50000」也不會改變它。如果我嘗試附加腳本來啓動Android Studio可執行文件,它會返回:「啓動錯誤:無法檢測圖形環境」 – cmark89

+0

好吧,將您當前的'/ etc/security/limits.conf'添加到問題plz中並告訴我,如果您在重新引導前檢查'ulimit -a' *,是否應用了新設置?還可以添加你的'uname -a'和'cat/proc/version'結果plz,也許它是特定OpenSUSE版本中的某種錯誤(我在OS X和Fedora 18上檢查過你的情況 - 一切看起來都不錯:) – solar

回答

4

至於現在,這到底是怎麼回事:

$ 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命令能夠改變一個登錄會話的所有者(即誰最初登錄到系統上創建的會話的用戶)沒有擁有者必須首先註銷該會話。 所以,當你退出2倍(從根和Corey會議)返回到其舊的限制似乎工作的初始會話。我不知道這怎麼會是,如果你重新啓動系統正常,所以我建議你corey下重新登錄(意明確註銷和登錄),我敢打賭,從limits.conf新的價值觀應該適用最後。

+0

顯式註銷並重新登錄不會改變任何內容;我仍然不得不爲自己的限制適用。我不知道這是否是發行版中的錯誤,或者如果我搞砸了某些東西,但是我接受這個答案,只是因爲你給了我一個可用的解決方法。 – cmark89

+0

好了,在閱讀http://danwalsh.livejournal.com/62070.html之後 - 看看bug#2,我開始考慮可能你的問題在某種程度上在SELinux策略中(這只是一個猜測,但是嘗試禁用SELinux並看看發生了什麼) – solar

相關問題