# Problem mit TS3 Server



## LastChaosTyp (8. Januar 2016)

Moin PCGHler,

ich habe mal wieder ein Problem und zwar mit meinem TS3-Server :/ 

Erstmal die Daten:
vServer:
- 1GB RAM 
- Ubuntu 15.04 64bit
- 225 GB HDD(Partition)
- TS3-Server der Version 3.0.11.4 (neuste Version)

Was ist das Problem?
Ich wollte heute auf meinen Server joinen und stelle fest, dass der Server sofort beim Joinen abstürzt. (Komischerweise stürzt dann auch mein Windows-TS3-Client ab)
Also habe ich in die Logs geschaut und festgestellt, dass alle neueren Logs LEER sind. Das kann ja nichts gutes bedeuten. => Server mit meinem Standardskript als Benutzer "ts3" gestartet: "./ts3server_startscript.sh start"

Startskript:

```
#!/bin/sh
# Copyright (c) 2010 TeamSpeak Systems GmbH
# All rights reserved

COMMANDLINE_PARAMETERS="${2}" #add any command line parameters you want to pass here
D1=$(readlink -f "$0")
BINARYPATH="$(dirname "${D1}")"
cd "${BINARYPATH}"
LIBRARYPATH="$(pwd)"

if [ -e ts3server_linux_x86 ]; then
	if [ -z "`uname | grep Linux`" -o ! -z "`uname -m | grep 64`" ]; then
                echo "Do you have the right TS3 Server package for your system? You have: `uname` `uname -m`, not Linux i386."
        fi
        BINARYNAME="ts3server_linux_x86"
elif [ -e ts3server_linux_amd64 ]; then
        if [ -z "`uname | grep Linux`" -o -z "`uname -m | grep 64`" ]; then
                echo "Do you have the right TS3 Server package for your system? You have: `uname` `uname -m`, not Linux x86_64."
        fi
        BINARYNAME="ts3server_linux_amd64"
elif [ -e ts3server_freebsd_x86 ]; then
        if [ -z "`uname | grep FreeBSD`" -o ! -z "`uname -m | grep 64`" ]; then
                echo "Do you have the right TS3 Server package for your system? You have: `uname` `uname -m`, not FreeBSD i386."
        fi
        BINARYNAME="ts3server_freebsd_x86"
elif [ -e ts3server_freebsd_amd64 ]; then
        if [ -z "`uname | grep FreeBSD`" -o -z "`uname -m | grep 64`" ]; then
                echo "Do you have the right TS3 Server package for your system? You have: `uname` `uname -m`, not FreeBSD amd64."
        fi
        BINARYNAME="ts3server_freebsd_amd64"
else
	echo "Could not locate binary file, aborting"
	exit 5
fi

case "$1" in
	start)
		if [ -e ts3server.pid ]; then
			if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
				echo "The server is already running, try restart or stop"
				exit 1
			else
				echo "ts3server.pid found, but no server running. Possibly your previously started server crashed"
				echo "Please view the logfile for details."
				rm ts3server.pid
			fi
		fi
		if [ "${UID}" = "0" ]; then
			echo WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
			c=1
			while [ "$c" -le 10 ]; do
				echo -n "!"
				sleep 1
				c=$(($c+1))
			done
			echo "!"
		fi
		echo "Starting the TeamSpeak 3 server"
		if [ -e "$BINARYNAME" ]; then
			if [ ! -x "$BINARYNAME" ]; then
				echo "${BINARYNAME} is not executable, trying to set it"
				chmod u+x "${BINARYNAME}"
			fi
			if [ -x "$BINARYNAME" ]; then
				export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}"					
				"./${BINARYNAME}" ${COMMANDLINE_PARAMETERS} > /dev/null &
 				PID=$!
				ps -p ${PID} > /dev/null 2>&1
				if [ "$?" -ne "0" ]; then
					echo "TeamSpeak 3 server could not start"
				else
					echo $PID > ts3server.pid
					echo "TeamSpeak 3 server started, for details please view the log file"
				fi
			else
				echo "${BINARNAME} is not exectuable, cannot start TeamSpeak 3 server"
			fi
		else
			echo "Could not find binary, aborting"
			exit 5
		fi
	;;
	stop)
		if [ -e ts3server.pid ]; then
			echo -n "Stopping the TeamSpeak 3 server"
			if ( kill -TERM $(cat ts3server.pid) 2> /dev/null ); then
				c=1
				while [ "$c" -le 300 ]; do
					if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
						echo -n "."
						sleep 1
					else
						break
					fi
					c=$(($c+1)) 
				done
			fi
			if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
				echo "Server is not shutting down cleanly - killing"
				kill -KILL $(cat ts3server.pid)
			else
				echo "done"
			fi
			rm ts3server.pid
		else
			echo "No server running (ts3server.pid is missing)"
			exit 7
		fi
	;;
	restart)
		$0 stop && $0 start ${COMMANDLINE_PARAMETERS} || exit 1
	;;
	status)
		if [ -e ts3server.pid ]; then
			if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
				echo "Server is running"
			else
				echo "Server seems to have died"
			fi
		else
			echo "No server running (ts3server.pid is missing)"
		fi
	;;
	*)
		echo "Usage: ${0} {start|stop|restart|status}"
		exit 2
esac
exit 0
```

Der Server startet und gibt Folgendes in der Konsole zurück:

```
ts3@TS3byLastChaosTyp:~$ ./ts3server_startscript.sh start
Starting the TeamSpeak 3 server
sh: echo: I/O error
TeamSpeak 3 server started, for details please view the log file
```

Also schaue ich ins Logfile, welches leer ist 

Sobald ich dann joine, freezt mein TS3 und in der Serverkonsole erscheint:

```
17:56:56.765483|CRITICAL|DatabaseQuery |   | Assertion "error == ERROR_ok" failed at server/serverlib/database/db_database.cpp:113;
```

Ich habe dann einfach mal in älteren nicht leeren Logfiles gesucht und am 1.1.16 diesen Log gefunden, an dem anscheinend alles begonnen hat:

```
2016-01-01 21:02:05.802118|INFO    |ServerLibPriv |   | TeamSpeak 3 Server 3.0.11.4 (2015-08-18 13:30:34)
2016-01-01 21:02:05.829021|INFO    |ServerLibPriv |   | SystemInformation: Linux 2.6.32-042stab094.8 #1 SMP Tue Dec 16 20:36:56 MSK 2014 x86_64 Binary: 64bit
2016-01-01 21:02:05.829083|INFO    |ServerLibPriv |   | Using hardware aes
2016-01-01 21:02:05.843973|INFO    |DatabaseQuery |   | dbPlugin name:    SQLite3 plugin, Version 2, (c)TeamSpeak Systems GmbH
2016-01-01 21:02:05.844058|INFO    |DatabaseQuery |   | dbPlugin version: 3.6.21
2016-01-01 21:02:05.844495|INFO    |DatabaseQuery |   | checking database integrity (may take a while)
2016-01-01 21:02:05.962215|WARNING |Accounting    |   | Unable to find valid license key, falling back to limited functionality
2016-01-01 21:02:07.925797|INFO    |              |   | Puzzle precompute time: 1873
2016-01-01 21:02:07.934631|INFO    |FileManager   |   | listening on 0.0.0.0:30033
2016-01-01 21:02:08.017254|INFO    |CIDRManager   |   | updated query_ip_whitelist ips: 127.0.0.1, 
2016-01-01 21:02:08.017839|INFO    |Query         |   | listening on 0.0.0.0:10011
2016-01-08 11:51:23.609464|ERROR   |DatabaseQuery |   | db_exec failed disk I/O error
2016-01-08 11:51:23.637055|ERROR   |DatabaseQuery |   | db_exec() update clients set client_lastconnected=1452253883, client_totalconnec error: disk I/O error
2016-01-08 11:51:23.637142|CRITICAL|DatabaseQuery |   | Assertion "error == ERROR_ok" failed at server/serverlib/database/db_database.cpp:113;
```

Dort taucht zum ersten mal der anscheinend vielen bekannten Fehler "|CRITICAL|DatabaseQuery |   | Assertion "error == ERROR_ok" failed at server/serverlib/database/db_database.cpp:113; " auf. 

Nach ein bisschen Googeln fand ich dann ein paar Lösungen heraus:
1.) Festplatte voll => Wurde überprüft, ist nicht so
2.) Dateieigentümer der Datenbank "ts3server.sqlite" ist falsch => Wurde mit chown überprüft und geändert, keine Besserung
3.) Nicht genügend Rechte an der Datei => Wurde mit "chmod 644 /home/ts3/ts3server.sqlite" überprüft/geändert, keine  Besserung
4.) Festplatte ist defekt => Anfrage an Hoster wurde gestellt, ist aber noch nicht beantwortet

Danach habe ich mal probiert das Startscript als root auszuführen und siehe da, der TS funktioniert wieder einwandfrei! 

Sobald ich aber wieder als "ts3"-Benutzer starten will, stürzt der Server wieder ab. Es scheint also ein Rechtefehler zu sein, den ich mir aber absolut nicht erklären kann , denn der Server lief vorher einwandfrei und es wurde von meiner Seite aus absolut nichts am System oder den Einstellungen geändert!

Also eben mal die Rechte überprüft, die wie folgt aussehen:

```
ts3@TS3byLastChaosTyp:~$ ls -l
total 8876
-rwxr-xr-x 1 ts3 ts3   45659 Aug 18 10:33 CHANGELOG
-rwxr-xr-x 1 ts3 ts3   36710 Aug 18 10:33 LICENSE
drwxr-xr-x 2 ts3 ts3    4096 Aug 18 10:33 doc
drwxr-xr-x 4 ts3 ts3    4096 Oct 21 16:23 files
-rwxr-xr-x 1 ts3 ts3  946224 Aug 18 10:33 libts3db_mariadb.so
-rwxr-xr-x 1 ts3 ts3 1638552 Aug 18 10:33 libts3db_sqlite3.so
drwxr-xr-x 2 ts3 ts3    4096 Jan  8 13:23 logs
-rwxr-xr-x 1 ts3 ts3       1 Oct 21 16:13 query_ip_blacklist.txt
-rwxr-xr-x 1 ts3 ts3      10 Oct 21 16:13 query_ip_whitelist.txt
drwxr-xr-x 2 ts3 ts3    4096 Aug 18 10:33 redist
drwxr-xr-x 2 ts3 ts3    4096 Aug 18 10:33 serverquerydocs
drwxr-xr-x 5 ts3 ts3    4096 Aug 18 10:33 sql
-rw-rw-r-- 1 ts3 ts3       0 Jan  8 13:23 ts3server.pid
-rwxr-xr-x 1 ts3 ts3  256000 Jan  8 12:46 ts3server.sqlitedb
-rwxr-xr-x 1 ts3 ts3 6106040 Aug 18 10:33 ts3server_linux_amd64
-rwxr-xr-x 1 ts3 ts3    1192 Aug 18 10:33 ts3server_minimal_runscript.sh
-rwxr-xr-x 1 ts3 ts3    3897 Aug 18 10:33 ts3server_startscript.sh
drwxr-xr-x 2 ts3 ts3    4096 Aug 18 10:33 tsdns
```

Hat noch jemand ne Idee, was ein möglicher Fehler sein kann? Ich bin über jeden Vorschlag froh, da ich bis zum Absturz keine Backups hatte :*

Vielen Dank
Henri


----------



## Saguya (8. Januar 2016)

Frag mal deinen Hoster ob er *Disk I/O Performance* auf der Platte limitiert ist o. ob Das V-Sys extrem ausgelastet ist.


----------



## LastChaosTyp (8. Januar 2016)

Ich habe das ganze mal mit in mein Ticket aufgenommen, aber vor Montag erwarte ich eh keine Antwort von denen 

Was ist denn die Disk I/O Performance oder das V-Sys?


----------



## LastChaosTyp (8. Januar 2016)

Okay, hier ein kleines Update:
Ich wollte gerade den CS:GO-Gameserver starten und habe dann in der Konsole einen Fehler bekommen, dass kein Platz mehr auf der Festplatte ist. Das ganze grenzt den Fehlerbereich weiter ein, jemand eine Idee?

Ich habe mir das Paket "discus" heruntergeladen, um zu sehen, wie viel Platz noch frei ist und das Folgende kam dabei heraus:

```
root@TS3byLastChaosTyp:/home/csgoserver# discus
Mount           Total         Used         Avail      Prcnt      Graph
/               79.24 GB     23.15 GB     56.09 GB    29.2%   [***-------]
/dev/shm        512.0 MB         4 KB     512.0 MB     0.0%   [----------]
/run            512.0 MB       7.5 MB     504.5 MB     1.5%   [----------]
/run/lock         5.0 MB         0 KB       5.0 MB     0.0%   [----------]
+/fs/cgroup     512.0 MB         0 KB     512.0 MB     0.0%   [----------]
+up/systemd         0 KB         0 KB         0 KB     0.0%   [----------]
/tmp            512.0 MB         0 KB     512.0 MB     0.0%   [----------]
+dev/mqueue         0 KB         0 KB         0 KB     0.0%   [----------]
/run/shm        512.0 MB         0 KB     512.0 MB     0.0%   [----------]
```


Edit: Danke fürs Verschieben, ist halt so ein Misch-Masch zwischen den Themen. Ich dachte zuerst, dass es an TS liegt und nicht an Linux 
Dabei fällt mir auf, dass im Webinterface meines Anbieters angeblich 225  GB vorhanden sind, von denen nur 23 GB belegt sind. Also beim Maximalen Speicher sind sich die Systeme nicht ganz einig :/


----------



## LastChaosTyp (13. Januar 2016)

Das Thema hat sich erledigt, da mir der Support geholfen hat. Es gab anscheinend einen Fehler in der Speicherzuweisung, der dann von denen behoben werden konnte  Trotzdem nochmal danke für die Hilfe


----------

