This is not a classification problem. It sounds like you just want to do heuristic load balancing. I'm not really sure it belongs here (maybe you would have more like if we migrated it to stackoverflow?).
That said, I can make several suggestions:
It is very unlikely that you can do load balancing efficiently if you try to reduce your multiple, disjoint parameters (response time, disk size etc.) to a single value, because "heavy use" can mean different things to different users. If I'm trying to write a 200gb file to disk, then I don't care about CPU load too much, but I really care about disk usage and disk space. Is this user a 5 or a 3? Without knowing whether a server has been assigned a load value of 3 for having low disk space and high i/o latency, or for having high CPU load, how can I tell where to assign this job?
A better approach, would be to avoid compressing the users down to a single number. Store their disk usage habits, CPU usage habits, and the rest separately. You could then use a metric to compare a user's needs to each system's load and then pick the one that is most similar. For example:
Bob uses moderate amounts of CPU time (3/5), lots of disk read/write time (4/5), and lots of disk space (5/5). We can represent Bob's needs as a vector {3,4,5}.
Machine 1 is under light load (4/5), has a slow, old, HDD (2/5) and the HDD is almost full (1/5). We represent it with the vector {4,2,1}
Machine 2 is under high load (2/5), has a fast new SSD (5/5) and the SSD is almost empty (5/5). We represent it with the vector {2,5,5}.
Suppose we use the Manhatten distance as our measure. Then Bob's needs are :
|3-4| + |4-2| + |5-1| = 7 different from Machine 1's state, and
|2-4| + |4-5| + |5-5| = 2 different from Machine 2's state. So we assign Bob to machine 2.
Obviously you can use any measure you like (squared difference, euclidean distance etc), and you might want to weight positive and negative values differently too, or add constraints.