1

I am not a Linux pro nor a Java pro, but I am setting up a Minecraft server on Ubuntu 16.04. System has 8GB RAM.

I followed all the directions for setting up the server (which is very simple) but when I ran the command:

sudo java –Xms1024M -Xmx1024M -jar minecraft_server.1.9.2.jar nogui

I got this:

Error: Could not find or load main class –Xms1024M

I then simply ran (after about 1 hour of hacking around trying to install different JREs): sudo java -jar minecraft_server.1.9.2.jar nogui and it worked.

What is the difference and what are the possible issues by not specifying RAM?

Additionally, what is a good practice for starting up the Minecraft server via SSH and letting it run in the background after disconnecting?

Edit:

When running java -jar minecraft_server.1.9.2.jar nogui I am seeing this output:

2016-05-08 14:30:35,683 ERROR Cannot access RandomAccessFile {}) java.io.FileNotFoundException: logs/latest.log (Permission denied)
2016-05-08 14:30:35,684 ERROR Unable to invoke method createAppender in class org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender for element RollingRandomAccessFile java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

Followed by an endless list of these:

at kx.a(SourceFile:44) [minecraft_server.1.9.2.jar:?]
at kx.b(SourceFile:54) [minecraft_server.1.9.2.jar:?]
at kx.a(SourceFile:44) [minecraft_server.1.9.2.jar:?]
at kx.b(SourceFile:54) [minecraft_server.1.9.2.jar:?]
at kx.a(SourceFile:44) [minecraft_server.1.9.2.jar:?]
at kx.b(SourceFile:54) [minecraft_server.1.9.2.jar:?]
at kx.a(SourceFile:44) [minecraft_server.1.9.2.jar:?]
at kx.b(SourceFile:54) [minecraft_server.1.9.2.jar:?]
at kx.a(SourceFile:44) [minecraft_server.1.9.2.jar:?]
at kx.b(SourceFile:54) [minecraft_server.1.9.2.jar:?]
2
  • Yes, good point. When I remove sudo, it's now a different issue. Please see edit. I did this once on a Raspberry PI and it was no issues at all, except it was too slow.
    – Jason
    May 8, 2016 at 21:30
  • 1
    Looks like it created some files in your home directory owned by root, since that is who you ran it as the first time, and now you don't have access to them. Run sudo chown -R yourname ~ to make everything owned by you again.
    – psusi
    May 8, 2016 at 21:57

3 Answers 3

3

Pay attention to case!

The m should be lower case, like so:

sudo java -Xms1024m -Xmx1024m -jar minecraft_server.1.9.2.jar nogui

Also, try putting the memory options at the end.

1
  • 1
    Caution: is not -! After all I think that's the main problem, java understands both m and M as units, see man java.
    – dessert
    Dec 9, 2017 at 13:05
2

Specifying RAM


The issues by not specifying RAM is pretty simply that your Minecraft server won't have enough RAM reserved for it, causing it to crash. Have you tried putting the RAM commands at the end, like so:

java -jar minecraft_server.jar -Xmx8192M

Be sure to adjust the RAM to your limits. Note, additionally, that you do not need to specify -Xms in your arguments. Be sure to also not use sudo, as that opens up the possibility for system compromise.


Using Minecraft in the background


You can run Minecraft in the background in many different ways. I've listed a few below as an example.

Method 1: screen

You can run a Minecraft session in the background using a nifty utility known as screen. You can do this by just running the screen command, followed by your start command. Afterwards, just press Ctrl + A followed by D. You'll come back to a terminal. To resume your screen session, just run screen -r.

Most people prefer screen because you can go back and access the console at any time.

Method 2: bg/fg

After your Minecraft server has started, press Ctrl+Z on your keyboard. From there, type bg. Your Minecraft server will be running in the background.

Note that I have not personally tested it, so YMMV.

Method 3: nohup

Prepend your start command with the nohup command. After your Minecraft server has started, just close your SSH session. The server will keep running.

Be careful using nohup though, because it will use up a LOT of hard drive space keeping its own logs. You can avoid this by appending >/dev/null 2>&1 to the end of the command.

Method 4: Initscripts

Initscripts are very complicated, but it lets your server auto-start/stop on boot or on manual invocation. Instructions are available online. There are many good methods, but they need to be tailored to your system.


Permission Errors


Your permissions problem is because Minecraft created all of its files as root. Therefore only root can access them. Fix this by running sudo chown -R $USER:$USER . in the Minecraft folder.

Source: Sysadmin for a Minecraft network

5
  • 1
    His server has 8GB of RAM. How can he not have enough? May 8, 2016 at 21:40
  • @AndroidDev Fixed to be more clear and concise.
    – Kaz Wolfe
    May 8, 2016 at 21:44
  • There were a few piece in all answers that helped, but this was the most complete. Thank you all. Part of the issue was permissions. I read elsewhere that I needed to chmod 764 to the jar. Additionally, the -Xmx2024M vs -Xms2024m doesn't seem to matter. 2G works as well.
    – Jason
    May 8, 2016 at 21:49
  • @Jason: For Minecraft servers, 764 and 664 are virtually the same, as the execute bit doesn't need to be set. Personally, however, I would use 644 as my permission node for the jarfile, but it really doesn't matter.
    – Kaz Wolfe
    May 8, 2016 at 21:52
  • See my comment below, you may want to adapt your answer.
    – dessert
    Dec 9, 2017 at 13:10
0

Hyphen instead of minus -

Following the comment of @dessert, it seems like you used hyphen (U+02010) instead of minus - (U+02212). Both are different characters, and Java doesn't escape when called with . It's the reason it interprets –Xms1024M as an argument (file/class name), even though you meant for it to be an option.

sudo java -Xms1024M -Xmx1024M -jar minecraft_server.1.9.2.jar nogui

Java does allow the use of both m and M for the memory arguments. The amount of RAM you provide the server with is enough to run it. In case it wasn't (or you use all of it by generating chunks really fast, for example), Java would have thrown a heap error instead.

Hope this helps future readers.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .