-
[Plugin] [Support] Unraid ZRAM Plugin (Compressed RAM) with disk swap
Aha, I figured there might have been reasons - having the swappiness be more flexible would be nice for sure. It did allow me to create it on the HDD I have set up. I configured a separate pool called 'swapdisk' with only one slot, and put said HDD into it. Being a separate pool, there's no parity protection in the first place, same as a cache pool would be (though that would also ideally want to be SSDs, whether there's one or multiple for sure), so I was confused about the note suggesting issues with parity operations, given it doesn't allow for array disks to be selected (which would be very undesirable for multiple reasons, including actually likely causing issues with parity operations). So far no issues running with the HDD, but I have noticed on the little widget-style thing on the dashboard (I don't know what they're meant to be called) it lists the zram, and the lower tier still gets referred to as "SSD" - it might be more prudent to call it "Swap Disk" or "Swap Drive" or such, rather than implying or trying to detect whether its an SSD or HDD. Those who can would surely be using an SSD, those who can't use an HDD because it is better than nothing, but in either case, its being used for swap. So far I haven't seen the server actually compress anything, or really use the swapdisk, so the thing on the dashboard is just flat for me, but running zramctl I get back matching zeros, so I guess its just not using the zram yet, which isn't a bad thing. I'm hopeful once you work out why its not listed in CA switching from the manual plugin to using CA (because I heavily prefer to do that for plugins in particular, as is best-practice for them) I can just switch over without it loosing the config, but I'm still not seeing it in CA, so I'm hoping you aren't expecting it to be showing up again yet.
-
[Plugin] [Support] Unraid ZRAM Plugin (Compressed RAM) with disk swap
Always welcome; if not reported, how can it be known? 😂 As an aside, I was previously going to use https://forums.unraid.net/topic/109342-plugin-swapfile-for-691/ until I found your plugin which configures zram and swap (very nice that you include both) Two additional questions for you, when you've got a moment Is there a reason you limit swappiness from 0-100? The actual swappiness can be well outside that range; I'm used to setting it to a value of 180 on my desktop, going off the arch wiki (https://wiki.archlinux.org/title/Zram#Optimizing_swap_on_zram), because I want zram favored very heavily over swap, as I only have spinning rust (HDDs) in my collection (for my unraid server as well as my desktop; the only SSD I have is a small old Samsung EVO 120G, which is used as my /boot and / partitions on my desktop). A higher swappiness means it will heavily favor the zram because of how much slower swap is when it has to page out for it; even on SSDs the general consensus I'm aware of is a value around 133; 180 seems ideal where I have only HDDs to burn instead. Is there actual evidence of the warning that pops up when the only cache drive you have is an HDD (again, I just don't have any SSDs in my collection besides my desktop's old /boot&/ drive) saying "HDD swap causes severe performance degradation and may interfere with parity operations"? I am aware HDD swap is terrible for performance, but its still a thousand times better (in my opinion) than running into an OOM issue; the bit I was unaware of was that it may interfere with parity operations, is there actual evidence you found related to that, or is just a possibility? Because with unraid having it assigned as a cache drive, not a part of the array pool, I would not think that should be a risk myself, and have not yet seen anything suggesting that, so I'm interested if you have found evidence to that, or have reasons to believe it a significant risk, especially since your plugin already only allows cache drives to show up.
-
-
[Plugin] [Support] Unraid ZRAM Plugin (Compressed RAM) with disk swap
This plugin is not visible for me in CA; only your "Unraid AI CLI Agents" plugin shows up.
-
[v7.2.0] Out of Memory errors
You called it - the actual binary the game server is creating to run, TowerServer-Linux-Shipping was being lobbed under /tmp! And without that explicitly mapped, it was sitting in cache. I've also added an extra parameter for --memory 8g just to be safe. Although honestly looking at the stats, I think even that is too much, it wasn't actually a memory issue, it was the game server creating the binary outside of the directories I defined. Figures as much, and again, I very much appreciate your insight!
-
[v7.2.0] Out of Memory errors
All directories the container uses are under that master /serverfiles/ directory, which is in turn mounted to a share; there shouldn't be any cache directories, as far as I'm aware 🤔 I'll map /tmp just to be safe, can't imagine it'd hurt anything. Also I don't believe I've restricted memory for docker itself anyhow, nor for the container, but this server only has 24G installed. So I guess I'll have a look at the swap plugin if mounting /tmp to the share doesn't resolve this, and I can't find any other cache directories. I have a script set up to auto restart it which would help too, but I've had to toggle that off due to a bug in the game about two months back; it doesn't re-enable a setting when it restarts for now. I'd wager that was probably masking this issue, rebooting the container before it got to the point of running the server out of memory! Thanks for looking into this for me, appreciate all the pointers!
-
[v7.2.0] Out of Memory errors
I have to facepalm and let out a little "fuck me" on that, that's a game server I've set up for Tower Unite (on Steam). Its something I've set up custom, using ich777/debian-baseimage:bullseye_amd64 as a base, but beyond that I cobbled together what I needed to set the game server up. So on the plus side, I guess that means I have complete control, but on the downside, I have no idea what kind of environment variable would be able to limit the memory allowed, and while I can likely google-fu that (eventually), I didn't even know I could set up a config so it isn't storing data in RAM, and that's honestly the path I'd rather take, because I'd say that sounds infinitely smarter, given its a game server. Soooo any tips on how I might go about changing the config so data isn't stored in RAM? XD If it helps, these are my... compose files? Not sure if that's exactly right as a term, but figured I'd offer them instead of having to be asked for, since I'm asking for help in the first place. root@Aperture:/mnt/user/Files/towerunite-destinyisland# ls -R .: Dockerfile compose.yaml scripts/ ./scripts: start-server.sh start.shDockerfile: FROM ich777/debian-baseimage:bullseye_amd64 #LABEL org.opencontainers.image.authors="[email protected]" #LABEL org.opencontainers.image.source="https://cdn.fastly.steamstatic.com/steamcommunity/public/images/items/394690/a0f0c8919e94e3dd49c3cd4515155d367f25d32c.png" RUN apt-get update && \ apt-get -y install --no-install-recommends lib32gcc-s1 lib32stdc++6 lib32z1 && \ rm -rf /var/lib/apt/lists/* VOLUME serverdata ENV DATA_DIR="/serverdata" ENV STEAMCMD_DIR="${DATA_DIR}/steamcmd" ENV SERVER_DIR="${DATA_DIR}/serverfiles" ENV GAME_ID="439660" ENV GAME_MAP="/Game/Maps/C_Lobby1" ENV GAME_PARAMS="" ENV GAME_PORT=7777 ENV QUERY_PORT=27015 #ENV GAME_INI="TowerServer.ini" # commented out because when provided it will only look relative to the executable ENV VALIDATE="false" ENV UMASK=000 ENV UID=1000 ENV GID=1000 ENV USERNAME="" ENV PASSWRD=#obfusicated because duh ENV USER="destinyisland" ENV DATA_PERM=770 RUN mkdir -p $DATA_DIR && \ mkdir -p $STEAMCMD_DIR && \ mkdir -p $SERVER_DIR && \ useradd -d $DATA_DIR -s /bin/bash $USER && \ chown -R $USER $DATA_DIR && \ ulimit -n 2048 ADD /scripts/ /opt/scripts/ RUN chmod -R 770 /opt/scripts/ #Server Start ENTRYPOINT ["/opt/scripts/start.sh"]compose.yaml: services: tower-unite: build: . container_name: tower-unite restart: always ports: - 7777:7777/udp - 7778:7778/udp - 27015:27015 - 27015:27015/udp volumes: - /mnt/user/appdata/towerunite-destinyisland/serverdata/serverfiles env_file: .env networks: {}scripts/start.sh: #!/bin/bash echo "---Ensuring UID: ${UID} matches user---" usermod -u ${UID} ${USER} echo "---Ensuring GID: ${GID} matches user---" groupmod -g ${GID} ${USER} > /dev/null 2>&1 ||: usermod -g ${GID} ${USER} echo "---Setting umask to ${UMASK}---" umask ${UMASK} echo "---Checking for optional scripts---" cp -f /opt/custom/user.sh /opt/scripts/start-user.sh > /dev/null 2>&1 ||: cp -f /opt/scripts/user.sh /opt/scripts/start-user.sh > /dev/null 2>&1 ||: if [ -f /opt/scripts/start-user.sh ]; then echo "---Found optional script, executing---" chmod -f +x /opt/scripts/start-user.sh ||: /opt/scripts/start-user.sh || echo "---Optional Script has thrown an Error---" else echo "---No optional script found, continuing---" fi echo "---Taking ownership of data...---" chown -R root:${GID} /opt/scripts chmod -R 750 /opt/scripts chown -R ${UID}:${GID} ${DATA_DIR} echo "---Starting...---" term_handler() { kill -SIGTERM "$killpid" wait "$killpid" -f 2>/dev/null exit 143; } trap 'kill ${!}; term_handler' SIGTERM su ${USER} -c "/opt/scripts/start-server.sh" & killpid="$!" while true do wait $killpid exit 0; done scripts/start-server.sh #!/bin/bash echo "---Validate Directories---" if [ ! -d ${DATA_DIR} ]; then echo "DATA_DIR not found!" mkdir -p ${DATA_DIR} if [ ! -d ${DATA_DIR} ]; then echo "DATA_DIR Creation Failed!" else echo "DATA_DIR Created Successfully." fi else echo "DATA_DIR Verified." fi if [ ! -d ${STEAMCMD_DIR} ]; then echo "STEAMCMD_DIR not found!" mkdir -p ${STEAMCMD_DIR} if [ ! -d ${STEAMCMD_DIR} ]; then echo "STEAMCMD_DIR Creation Failed!" else echo "STEAMCMD_DIR Created Successfully." fi else echo "STEAMCMD_DIR Verified." fi if [ ! -d ${SERVER_DIR} ]; then echo "SERVER_DIR not found!" mkdir -p ${SERVER_DIR} if [ ! -d ${SERVER_DIR} ]; then echo "SERVER_DIR Creation Failed!" else echo "SERVER_DIR Created Successfully." fi else echo "SERVER_DIR Verified." fi echo "---Validate SteamCMD---" if [ ! -f ${STEAMCMD_DIR}/steamcmd.sh ]; then echo "SteamCMD not found!" wget -q -O ${STEAMCMD_DIR}/steamcmd_linux.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz if [ ! -f ${STEAMCMD_DIR}/steamcmd_linux.tar.gz ]; then echo "Downloading SteamCMD has FAILED!" else echo "SteamCMD downloaded successfully." fi tar --directory ${STEAMCMD_DIR} -xvzf ${STEAMCMD_DIR}/steamcmd_linux.tar.gz rm ${STEAMCMD_DIR}/steamcmd_linux.tar.gz fi echo "---Update SteamCMD---" if [ "${USERNAME}" "" ]; then ${STEAMCMD_DIR}/steamcmd.sh \ +login anonymous \ +quit else ${STEAMCMD_DIR}/steamcmd.sh \ +login ${USERNAME} ${PASSWRD} \ +quit fi echo "---Update Server---" if [ "${USERNAME}" "" ]; then if [ "${VALIDATE}" == "true" ]; then echo "---Validating installation---" ${STEAMCMD_DIR}/steamcmd.sh \ +force_install_dir ${SERVER_DIR} \ +login anonymous \ +app_update ${GAME_ID} validate \ +quit else ${STEAMCMD_DIR}/steamcmd.sh \ +force_install_dir ${SERVER_DIR} \ +login anonymous \ +app_update ${GAME_ID} \ +quit fi else if [ "${VALIDATE}" == "true" ]; then echo "---Validating installation---" ${STEAMCMD_DIR}/steamcmd.sh \ +force_install_dir ${SERVER_DIR} \ +login ${USERNAME} ${PASSWRD} \ +app_update ${GAME_ID} validate \ +quit else ${STEAMCMD_DIR}/steamcmd.sh \ +force_install_dir ${SERVER_DIR} \ +login ${USERNAME} ${PASSWRD} \ +app_update ${GAME_ID} \ +quit fi fi echo "---Prepare Server---" if [ ! -f ${DATA_DIR}/.steam/sdk32/steamclient.so ]; then if [ ! -d ${DATA_DIR}/.steam ]; then mkdir ${DATA_DIR}/.steam fi if [ ! -d ${DATA_DIR}/.steam/sdk32 ]; then mkdir ${DATA_DIR}/.steam/sdk32 fi cp -R ${STEAMCMD_DIR}/linux32/* ${DATA_DIR}/.steam/sdk32/ fi chmod -R ${DATA_PERM} ${DATA_DIR} cp ${SERVER_DIR}/linux64/steamclient.so ${SERVER_DIR}/Tower/Binaries/Linux/steamclient.so echo "---Server ready---" echo "---Start Server---" cd ${SERVER_DIR} ${SERVER_DIR}/Tower/Binaries/Linux/TowerServer-Linux-Shipping ${GAME_MAP} -log -nosteamclient -Port=${GAME_PORT} -QueryPort=${QUERY_PORT} ${GAME_PARAMS} #${SERVER_DIR}/Tower/Binaries/Linux/TowerServer-Linux-Shipping ${GAME_MAP} -log -nosteamclient -Port=${GAME_PORT} -QueryPort=${QUERY_PORT} -TowerServerINI=${GAME_INI} ${GAME_PARAMS} # commented out because when provided it will only look relative to the executableEspecially given I cobbled it together, I figured it being present would likely only help. Thanks for your time as well, its much appreciated!
-
[v7.2.0] Out of Memory errors
If anyone has experience with out of memory errors, I'd appreciate any time you have to spare, I'm in the middle of my work week, so I do not myself. Since upgrading to 7.2.0, I've gotten two or three of these errors now. I've got diagnostics like the fix common problems topic recommended. aperture-diagnostics-20251103-0621.zip
-
[Support] Goobaroo - Modded Minecraft Java Servers
Thank you so much -- I still never figured out where I went wrong with that, but you've saved me a ton of headache either way! ^_^
-
[Support] Goobaroo - Modded Minecraft Java Servers
Could you push an update for SkyFactory One? For whatever reason, the 1.0.4 client is crashing for me, while the 1.0.5 client runs just fine, but says the server is mismatched on modlist (I believe the server is 1.0.4, though I don't know if the modlist actually differs from the versions). I tried upgrading the docker enviornment manually, according to the UPDATE-GUIDE.txt file, * didn't bother making backups, because this was a fresh install & there's nothing to backup * downloaded the server file for 1.0.5 from curseforge (https://www.curseforge.com/minecraft/modpacks/skyfactory-one/files/3652066) * merged the structure on the server, so I could run the install script on the desktop * ran the install script, told it for a server, in that directory, it ran fine according to the output * uploaded everything back to the server, including the libraries, and tried running the server At first, it had a permission error on the forge-1.16.5-36.2.28.jar file (I guess either the installer didn't give it perms or filezilla stripped them, but just them apparently), but after fixing that, the output log still shows like it can't access the file. + cd /data + [[ true = \f\a\l\s\e ]] + echo eula=true + [[ -f SkyFactory_One_Server_1_0_4.zip ]] + [[ -n SkyFactoryOne, now with RFC2321! ]] + sed -i '/motd\s*=/ c motd=SkyFactoryOne, now with RFC2321!' /data/server.properties + [[ -n world ]] + sed -i '/level-name\s*=/ c level-name=world' /data/server.properties + [[ -n mesmerus ]] + echo mesmerus + awk -v RS=, '{print}' + . ./settings.sh ++ export $'INSTALL_JAR=forge-1.16.5-36.2.28-installer.jar\r' ++ INSTALL_JAR=$'forge-1.16.5-36.2.28-installer.jar\r' ++ export $'SERVER_JAR=forge-1.16.5-36.2.28.jar\r' ++ SERVER_JAR=$'forge-1.16.5-36.2.28.jar\r' ++ export $'JAVA_JAR=\r' ++ JAVA_JAR=$'\r' ++ $'\r' ./settings.sh: line 6: $'\r': command not found ++ export $'MIN_RAM=1024M\r' ++ MIN_RAM=$'1024M\r' ++ export $'MAX_RAM=4096M\r' ++ MAX_RAM=$'4096M\r' ++ export 'JAVA_PARAMETERS=-XX:+UseG1GC -Dsun.rmi.dgc.server.gcInterval=2147483646 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -Dfml.readTimeout=180' ++ JAVA_PARAMETERS='-XX:+UseG1GC -Dsun.rmi.dgc.server.gcInterval=2147483646 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -Dfml.readTimeout=180' + curl -o log4j2_112-116.xml https://launcher.mojang.com/v1/objects/02937d122c86ce73319ef9975b58896fc1b491d1/log4j2_112-116.xml % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed + java -Xms2048m -Xmx8096m -XX:MaxPermSize=256M -Dlog4j.configurationFile=log4j2_112-116.xml -jar $'forge-1.16.5-36.2.28.jar\r' nogui Error: Unable to access jarfile forge-1.16.5-36.2.28.jar I don't know why it can't access it, because it is present, and as far as I know the permissions are fine. I've also tried setting the owner as nobody:nobody and nobody:users, just to make sure that wasn't the case, but no dice. total 158M drwxrwxrwx 1 1000 1000 264 May 8 05:57 ./ drwxrwxrwx 1 nobody users 4.0K May 8 04:02 ../ -rw-r--r-- 1 1000 1000 180 May 8 05:46 Install.bat -rwxr-xr-x 1 1000 1000 212 May 8 05:46 Install.sh* -rw-r--r-- 1 1000 1000 608 May 8 05:46 NOTES.txt -rw-r--r-- 1 1000 1000 2.8K May 8 05:46 README.txt -rw-r--r-- 1 1000 1000 1.6K May 8 05:46 README_ISLANDS.txt -rw-r--r-- 1 1000 1000 775 May 8 05:46 ServerStart.bat -rwxr-xr-x 1 1000 1000 1.5K May 8 05:46 ServerStart.sh* -rw-r--r-- 1 1000 1000 930 May 8 05:46 ServerStartJava14.bat -rw-r--r-- 1 1000 1000 103M May 8 04:07 SkyFactory_One_Server_1_0_4.zip -rw-r--r-- 1 1000 1000 1.3K May 8 05:46 UPDATE-GUIDE.txt -rw-r--r-- 1 1000 1000 2 May 8 04:57 banned-ips.json -rw-r--r-- 1 1000 1000 2 May 8 04:57 banned-players.json drwxrwxrwx 1 1000 1000 4.0K May 8 05:13 config/ drwxrwxrwx 1 1000 1000 4.0K May 8 05:13 defaultconfigs/ -rw-r--r-- 1 1000 1000 10 May 8 05:57 eula.txt -rwxr-xr-x 1 1000 1000 7.1M Dec 10 12:18 forge-1.16.5-36.2.20-installer.jar* -rw-r--r-- 1 1000 1000 1.8M May 8 04:16 forge-1.16.5-36.2.20-installer.jar.log -rwxr-xr-x 1 1000 1000 208K May 8 04:07 forge-1.16.5-36.2.20.jar* -rwxr-xr-x 1 1000 1000 7.6M May 8 05:46 forge-1.16.5-36.2.28-installer.jar* -rwxrwxrwx 1 1000 1000 208K May 8 05:46 forge-1.16.5-36.2.28.jar* drwxrwxrwx 1 1000 1000 40 May 8 05:13 global_data_packs/ drwxrwxrwx 1 1000 1000 27 May 8 05:13 global_resource_packs/ -rw-rw-rw- 1 1000 1000 1.8M May 8 05:46 installer.log drwxr-xr-x 1 1000 1000 46 May 8 04:21 journeymap/ drwxr-xr-x 1 1000 1000 50 May 8 04:07 libraries/ -rw-r--r-- 1 1000 1000 1.2K May 8 05:57 log4j2_112-116.xml drwxr-xr-x 1 1000 1000 78 May 8 04:53 logs/ -rwxr-xr-x 1 1000 1000 37M May 8 05:46 minecraft_server.1.16.5.jar* drwxrwxrwx 1 1000 1000 81 May 8 05:13 mods/ -rw-r--r-- 1 1000 1000 136 May 8 04:57 ops.json -rw-r--r-- 1 1000 1000 70 May 8 05:57 ops.txt -rw-r--r-- 1 1000 1000 10 May 8 04:53 ops.txt.converted drwxrwxrwx 1 1000 1000 23 May 8 05:13 packmenu/ drwxr-xr-x 1 1000 1000 6 May 8 04:18 patchouli_books/ -rw-r--r-- 1 1000 1000 14K May 8 05:46 server-icon.png -rw-r--r-- 1 1000 1000 1.2K May 8 05:57 server.properties -rw-r--r-- 1 1000 1000 484 May 8 05:46 settings.bat -rwxr-xr-x 1 1000 1000 568 May 8 05:46 settings.sh* -rw-r--r-- 1 1000 1000 107 May 8 04:57 usercache.json -rw-r--r-- 1 1000 1000 137 May 8 04:31 whitelist.json drwxr-xr-x 1 1000 1000 98 May 8 05:07 world/ Clearly, I'm doing something wrong, but I don't know what, but if you can just push an update for 1.0.5 on SkyFactory One, it'd save me the headache & update the server, since the update is available. Thanks for help in either direction!