I guess you need to find out 
There are tools, that are a good start. You’d need to use them from the terminal (Tilix):
-
free: shows available memory and more important used swap. Low memory and constant swapping is a good way to make a Linux really slow. -
top: shows memory and cpu usage and might give a good hint which process(es) are the cause for your problems -
iotop: fills an information gap in case of a high load (shown in top). A high load usually means that some process is excessively using I/O (input-output-operations e.g. disk or network)
In your terminal (Tilix) you’ll have to type:
someuser@somehost:~$ free
total used free shared buff/cache available
Mem: 16405508 3172540 9302360 740096 3930608 12152712
Swap: 17974048 0 17974048
If Mem: free is very low and Swap: used high you’ll know that your system is missing free ram for what it is doing.
someuser@somehost:~$ top
This gives you an output in table form with regular updates like this:
top - 10:55:50 up 2:28, 1 user, load average: 0,11, 0,18, 0,24
Tasks: 243 total, 1 running, 242 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2,5 us, 0,8 sy, 0,0 ni, 96,5 id, 0,0 wa, 0,0 hi, 0,2 si, 0,0 st
MiB Mem : 16021,0 total, 9062,7 free, 3116,8 used, 3841,5 buff/cache
MiB Swap: 17552,8 total, 17552,8 free, 0,0 used. 11846,7 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6121 cvogel 20 0 3143624 253100 138280 S 4,7 1,5 4:00.74 gnome-shell
5928 cvogel 20 0 498152 223760 194776 S 4,0 1,4 3:26.70 Xorg
1
load average is an indicator (like mentioned above) and the processes listed on top are the ones with the highest cpu usage. You can switch to memory usage by typing an upper M. A lower ‘q’ quits top.
Not sure if iotop is installed by default so you might need to get it first:
someuser@somehost:~$ sudo apt-get install iotop
You can call it using
someuser@somehost:~$ sudo iotop
Here is an example output - it works similar to top:
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init nosplash
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_gp]
4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_par_gp]
6 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H-kblockd]
8 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [mm_percpu_wq]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
As you can see my system is not using I/O much :).
These informations should already reveal some hint about what’s going on.